Hallo Leute,
ich habe (wieder Mal) ein Problem mit einer SQL-Query und mir fiel leider auch (wieder Mal) kein passender Betreff ein. Ich schreibe zuerst die (vereinfachten) Tabellen-Strukturen:
tbl_user:
id, name, datum, ...
tbl_fotos:
u_id, id, ...
tbl_favoriten:
u1_id, u2_id
Erklärung zur TBL_FAVORITEN:
Ein User kann x andere User zu seinen Favoriten hinzufügen. Angenommen, der User mit der ID 1 fügt den User mit der ID 5 zu seinen Favoriten hinzu, sieht die Tabelle so aus:
u1_id: 1
u2_id: 5
Der User kann sich alle seine Favoriten mit Foto anzeigen lassen (User ohne Foto(s) gibt es nicht). Das mache ich mit folgender Abfrage:
SELECT
user.id as uid, user.name, user.datum, foto.id as fid
FROM
tbl_favoriten fav
JOIN
tbl_user user ON user.id=fav.u2_id
JOIN
tbl_fotos foto ON user.id=foto.u_id
WHERE
fav.u1_id=1
GROUP BY
user.id
(Die Gruppierung, weil jeder User, somit jeder Favorit, mehrere Fotos haben kann.)
In diesem Fall würden mir also die Daten und das Foto vom User 5 angezeigt werden, wenn ich User 1 bin.
Nun benötige ich jedoch noch eine zusätzliche Anzeige, ob mein Favorit (User 5) auch mich (User 1) in seinen Favoriten hat.
Also angenommen, die Daten in der TBL_FAVORITEN sehen wie folgt aus:
u1_id - u2_id
1 - 5
1 - 4
5 - 1
4 - 5
Hier gibt es ein "Favoriten-Pärchen" bei User 1 und User 5, da sich beide gegenseitig in den Favoriten haben.
Somit sollen mir die Daten von User 5 und User 4 angezeigt werden, bei User 5 soll jedoch noch der Hinweis erscheinen, dass dieser mich ebenfalls in seinen Favoriten hat.
Leider weiß ich nicht, wie ich das machen soll, ohne für jeden User meiner Favoritenliste eine neue Abfrage zu starten, um zu prüfen, ob dieser mich in seinen Favoriten hat.
Ich müsste ja theoretisch temporär eine zusätzliche Spalte einfügen, die speichert, ob eine Gegenseitigkeit besteht oder nicht. Doch leider fällt mir keinen Möglichkeit ein, um diese zusätzliche Informationsabfrage in dieses SQL-Statement einzufügen.
Ich hoffe, ihr versteht überhaupt mein Problem, bzw. wie das Ergebnis aussehen soll. Noch mehr hoffe ich, dass ihr mir dann auch helfen könnt
Ich bedanke mich schon im Vorraus,
DasD
ich habe (wieder Mal) ein Problem mit einer SQL-Query und mir fiel leider auch (wieder Mal) kein passender Betreff ein. Ich schreibe zuerst die (vereinfachten) Tabellen-Strukturen:
tbl_user:
id, name, datum, ...
tbl_fotos:
u_id, id, ...
tbl_favoriten:
u1_id, u2_id
Erklärung zur TBL_FAVORITEN:
Ein User kann x andere User zu seinen Favoriten hinzufügen. Angenommen, der User mit der ID 1 fügt den User mit der ID 5 zu seinen Favoriten hinzu, sieht die Tabelle so aus:
u1_id: 1
u2_id: 5
Der User kann sich alle seine Favoriten mit Foto anzeigen lassen (User ohne Foto(s) gibt es nicht). Das mache ich mit folgender Abfrage:
SELECT
user.id as uid, user.name, user.datum, foto.id as fid
FROM
tbl_favoriten fav
JOIN
tbl_user user ON user.id=fav.u2_id
JOIN
tbl_fotos foto ON user.id=foto.u_id
WHERE
fav.u1_id=1
GROUP BY
user.id
(Die Gruppierung, weil jeder User, somit jeder Favorit, mehrere Fotos haben kann.)
In diesem Fall würden mir also die Daten und das Foto vom User 5 angezeigt werden, wenn ich User 1 bin.
Nun benötige ich jedoch noch eine zusätzliche Anzeige, ob mein Favorit (User 5) auch mich (User 1) in seinen Favoriten hat.
Also angenommen, die Daten in der TBL_FAVORITEN sehen wie folgt aus:
u1_id - u2_id
1 - 5
1 - 4
5 - 1
4 - 5
Hier gibt es ein "Favoriten-Pärchen" bei User 1 und User 5, da sich beide gegenseitig in den Favoriten haben.
Somit sollen mir die Daten von User 5 und User 4 angezeigt werden, bei User 5 soll jedoch noch der Hinweis erscheinen, dass dieser mich ebenfalls in seinen Favoriten hat.
Leider weiß ich nicht, wie ich das machen soll, ohne für jeden User meiner Favoritenliste eine neue Abfrage zu starten, um zu prüfen, ob dieser mich in seinen Favoriten hat.
Ich müsste ja theoretisch temporär eine zusätzliche Spalte einfügen, die speichert, ob eine Gegenseitigkeit besteht oder nicht. Doch leider fällt mir keinen Möglichkeit ein, um diese zusätzliche Informationsabfrage in dieses SQL-Statement einzufügen.
Ich hoffe, ihr versteht überhaupt mein Problem, bzw. wie das Ergebnis aussehen soll. Noch mehr hoffe ich, dass ihr mir dann auch helfen könnt
Ich bedanke mich schon im Vorraus,
DasD
Comment