Ich habe zwei Tabellen in meiner MySQL-Datenbank, eine ist eine Bibliothek aller Bücher in der Datenbank, und die andere enthält einzelne Zeilen, die Bücher entsprechen in einer Benutzerbibliothek.MySQL Left Outer Join, Elemente in zweiter Tabelle ausschließen Benutzer
Zum Beispiel:
Bibliothek Tabelle
`id` `title`...
===== ===========
1 Moby Dick
2 Harry Potter
Sammlung Tabelle
`id` `user` `book`
===== ====== =======
1 1 2
2 2 2
3 1 1
Was ich tun möchte, wird eine Abfrage ausführen, die alle Bücher zeigen, die nicht in einer Benutzersammlung. Ich kann diese Abfrage ausführen, alle Bücher zu zeigen, nicht in jedes Benutzer-Sammlung:
SELECT *
FROM `library`
LEFT OUTER JOIN `collection` ON `library`.`id` = `collection`.`book`
WHERE `collection`.`book` IS NULL
Dieses so weit ganz gut funktioniert, wie ich sagen kann. Wenn Sie dies in PHPMyAdmin ausführen, werden alle Bücher ausgegeben, die nicht in der Sammeltabelle enthalten sind.
Wie kann ich das auf einen bestimmten Benutzer beschränken? Mit den obigen Dummy-Daten möchte ich zum Beispiel Buch 1 erhalten, wenn Benutzer 2
die Abfrage ausführt, und keine Bücher, wenn Benutzer 1
die Abfrage ausführt.
Nur eine AND user=[id]
hinzufügen funktioniert nicht, und mit meinem extrem begrenzten Wissen von JOIN
Aussagen komme ich nirgendwohin wirklich.
Auch die ID der Ergebnisse zurückgegeben (der Abfrage angezeigt, die nicht das tut, was ich will, aber funktioniert) ist 0-- Wie stelle ich sicher, dass die zurückgegebene ID ist die von library.id
?
Bitte zeigen Sie die tatsächliche Tabellenstruktur und geben Sie uns den Fehler (falls vorhanden) Sie begegnen. Ihre Abfrage erwähnt ein Feld namens "Artikel", das nicht in Ihren Tabellenbeschreibungen enthalten ist. – bpeterson76
Ups-- Ich habe es als Artikel verlassen, als ich kopiert und eingefügt habe. Es sollte "Buch" sein. Ich habe die Frage geändert. –