Join mit mehreren Tabellen

akkie

Erfahrenes Mitglied
Hi

Hab mal wieder ein Problem.

Ich versuche grad ein Select Statement für mein Gästebuch zu bauen. Dafür verwende ich 3 Tabellen.

cms_gbook
cms_gbook_comment
cms_user

In cms_gbook und in cms_gbook_comment sind jeweils die user_id`s der Poster gespeichert.

Nun will ich aber über eine Abfrage den user_id`s gleich den passenden Name zuordnen. Mit dem User aus der Tabelle cms_gbook habe ich es hinbekommen. Nur bei allen 2 Usern scheiter ich.


PHP:
$query = "SELECT t1.id, t1.text, t1.name, t1.user_id, t1.email, t1.website, t1.date_time,

          t2.id as comment_id, t2.comment, t2.name as comment_name, t2.user_id as comment_user_id, t3.user_name

          FROM cms_gbook t1 LEFT JOIN cms_gbook_comment t2 ON t1.id = t2.post_id

          LEFT JOIN cms_user t3 ON t3.user_id = t1.user_id

          ORDER BY t1.id DESC LIMIT ".intval($limit).",".$row_settings['gbook_anz']."";

$result = safe_query($query);


ich würde jetz gern das Feld comment_user_name haben das dann den passenden Usernamen enthält.


Mfg Akkie
 
Hi!

Nach nicht wirklich langem Studium Deines Statements ein kleiner Ansatz:
Wenn ein Eintrag in cms_gbook mehrere Einträge im cms_gbook_comment haben kann, dann müsste das zweite LEFT JOIN
ON t3.user_id = t2.user_id
lauten...(?)
 
Hab es hinbekommen

PHP:
$query = "SELECT t1.id, t1.text, t1.name, t1.user_id, t1.email, t1.website, t1.date_time,
          t2.id as comment_id, t2.comment, t2.name as comment_name, t2.user_id as comment_user_id, t3.user_name, t4.user_name as comment_user_name
          FROM cms_gbook t1 LEFT JOIN cms_gbook_comment t2 ON t1.id = t2.post_id
          LEFT JOIN cms_user t3 ON t3.user_id = t1.user_id
          LEFT JOIN cms_user t4 ON t4.user_id = t2.user_id
          ORDER BY t1.id DESC LIMIT ".intval($limit).",".$row_settings['gbook_anz']."";
$result = safe_query($query);

Mfg Akkie
 
Zuletzt bearbeitet:
Dann würde Dir aber doch einfach ein weiteres LEFT JOIN helfen, oder nicht?

Bzw. ein anderer Grundgedanke:
brauchst Du für die comments wirklich ein zweites Table?
Im grundegenommen sind die comments gleich der Haupteinträge, plus der "Verlinkung" zum Haupteintrag:
id, to_id, text, user_id
-> gbook-Eintrag: id=1, to_id="", text="text1", user_id=101
-> gbook_comment: id=2, to_id=1, text="antwort auf text1", user_id=155
-> gbook_comment: id=3, to_id=1, text="antwort 2 auf text1", user_id=233

Somit sind alle, die kein to_id haben -> cms_gbook und
per LEFT JOIN des Tables auf sich selbst bekommst Du auch die comments...
 

Neue Beiträge

Zurück