2009-08-12 12 views
0

Ich muss ehrlich sein und Ihnen sagen, dass ich nicht gut in Datenbankabfragen bin und diese Frage ist wahrscheinlich ziemlich einfach.SQL-Anweisung mit mehreren Joins

Ich habe drei Tabellen

Post 
    ID 
    entry 
Category 
    ID 
    name 
CategoryBinding 
    ID 
    postID 
    categoryID 

Meine normale Abfrage alle Beiträge mit den Kategorien, um es in

SELECT * FROM `Post` AS `p` 
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID 
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID 

die zurückgegebenen Abfrage für diese gesetzt wird, ist so etwas wie:

ID entry ID name ID postID categoryID 
1  entry1 1  php  1  1   1 
1  entry1 2  asp  1  1   2 

2  entry2 1  php  1  2   1 

3  entry3 null null null null  null 

Jetzt möchte ich alle Beiträge erhalten, die zu einer bestimmten Kategorie ID mit allen Kategorien Th gehört e Post wird hineingelegt.
I.E Ich möchte die gleichen Dinge wie in der ersten Abfrage, sondern nur die Beiträge, die zu einer bestimmten Kategorie gehören. Jetzt möchte ich nur die Beiträge, die der Kategorie asp gehören. Das ist

ID entry ID name ID postID categoryID 
1  entry1 1  php  1  1   1 
1  entry1 2  asp  1  1   2 

Wissen Sie, wie ich das tun kann?

Ich werde sehr dankbar sein, wenn jemand mir hilft, da dies mehr wie eine Frage "Mach die Arbeit für mich" ist.

Antwort

3
SELECT * 
FROM `Post` AS `p` 
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID 
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID 
INNER JOIN `Post` AS `p2` ON p.id = p2.id 
WHERE p.id in 
(
    SELECT p2.id 
    FROM `Post` as `p2` 
    LEFT JOIN `CategoryBinding` AS `cb` ON p2.ID = cb.postID 
    LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID 
    WHERE c.id = @SomeCategory 
) 

In Ordnung, finaler Schuss.

Dies wird doppelte Zeilen zurückgeben, fügen Sie einfach eine Gruppe von, was Sie wollen.

+0

Ich habe meine Frage geändert und die erwartete Ausgabe hinzugefügt. – unkownt

+0

Die Abfrage, die Sie geschrieben haben, gibt mir nur 1 Eintrag1 2 ASP 1 1 2 – unkownt

+0

In Ordnung, ich aktualisierte die Abfrage. Gib diesem einen Schuss. – Brandon

Verwandte Themen