Basti_2015
Mitglied
Hallo, ich habe vor 2\3 Jahren ein nachrichtenscript für ein Projekt realisiert. Die dazugehörige Sqlabfrage habe ich mir damals aus dem Internet gezogen. Für die damaligen Voraussetzungen perfekt, für das neue nicht geeignet. Da es im ersten Projekt um die Verwaltung unserer Arbeitstageszettel ging, rein privat, reichte die Kommunikation mit einer Nachrichtenbox aus.
Nun versuche ich jedoch, die gefilterten letzten Nachrichten auf den Betreff/titel zusätzlich zu filtern/aufzuteilen.
Um dies zu realisieren, müsste ich das statement jedoch erstmal verstehen, was ich absolut nicht in mein Kopf bekomme.
Hier mal die Abfrage.
Diese Abfrage gibt mir immer die letzte Nachricht einer Konversation zweier user. Ich benötige dies jetzt mit einem zusätzlichen indikator, und zwar dem title/Betreff der Nachricht.
Ich erkenne eine Verschachtelung von Abfragen, ein join in eine andere Tabelle. Was das AS und die IFs machen, bin ich mir nicht sicher. Woher das max_dat her- und wo ich jetzt den Teil mit WHERE pm_title==pm_title hinkommt und ob es auch überhaupt so zu realisieren geht..... Mein Kopf raucht
Hat jemand eine Idee und ist diese Abfrage überhaupt so OK?
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken.
Beste Grüße
Basti
Nun versuche ich jedoch, die gefilterten letzten Nachrichten auf den Betreff/titel zusätzlich zu filtern/aufzuteilen.
Um dies zu realisieren, müsste ich das statement jedoch erstmal verstehen, was ich absolut nicht in mein Kopf bekomme.
Hier mal die Abfrage.
Code:
SELECT
msg.user_2,
msg_date,
pm_message,
pm_status,
users.USERNAME
FROM
(
SELECT
user_1,
user_2,
MAX(msg_date) AS max_msg_date
FROM
(
SELECT
:uid AS user_1,
IF(pm_sender = :uid, pm_recipient, pm_sender) AS user_2,
pm_date AS msg_date
FROM
cf4_pm
WHERE
IFNULL(:uid IN (pm_recipient, pm_sender), FALSE)
) AS dat
GROUP BY
user_1,
user_2
) AS max_dat
INNER JOIN (
SELECT
:uid AS user_1,
IF(pm_sender = :uid, pm_recipient, pm_sender) AS user_2,
pm_message,
pm_date AS msg_date,
pm_status
FROM
cf4_pm
WHERE
IFNULL(:uid IN (pm_recipient, pm_sender), FALSE)
&& pm_archived != 1
&& pm_deleted != 1
) AS msg
ON msg.user_1 = max_dat.user_1
AND msg.user_2 = max_dat.user_2
AND msg.msg_date = max_dat.max_msg_date
JOIN
users
ON
msg.user_2 = users.ID
ORDER BY
msg_date DESC
Diese Abfrage gibt mir immer die letzte Nachricht einer Konversation zweier user. Ich benötige dies jetzt mit einem zusätzlichen indikator, und zwar dem title/Betreff der Nachricht.
Ich erkenne eine Verschachtelung von Abfragen, ein join in eine andere Tabelle. Was das AS und die IFs machen, bin ich mir nicht sicher. Woher das max_dat her- und wo ich jetzt den Teil mit WHERE pm_title==pm_title hinkommt und ob es auch überhaupt so zu realisieren geht..... Mein Kopf raucht
Hat jemand eine Idee und ist diese Abfrage überhaupt so OK?
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken.
Beste Grüße
Basti