Frage

Im Grunde habe ich eine MySQL-Abfrage in etwa wie folgt:

mysql_query("SELECT n.title, v.value FROM posts n INNER JOIN votes v ON n.id = v.id");

Und was ich tun muß, ist den Titel aus den Beiträgen Tabelle und den aktuellen Abstimmung Wert aus der Tabelle Stimmen zu greifen.

Im Moment Stimmen werden nicht in die Stimmen-Tabelle gespeichert, es sei denn eine Abstimmung geschieht. So alle Beiträge mit 0 Stimmen sind nicht in der Stimmen-Tabelle.

Dies verursacht einen Fehler, den es versucht, den Titel und die Abstimmung Wert, bei dem die Post id = der Abstimmung Wert id zu erhalten. Wenn es keine Aufzeichnung in der Stimmen-Tabelle ist, dann sollte Wert zurückgeben als NULL oder 0, aber im Moment der ganze Abfrage gibt als null, so kann ich nicht einmal den Titel zurück.

Wie kann ich dieses Problem beheben alle in einer Abfrage? Ich möchte nicht, mehrere Abfragen zu verwenden, haben ... Danke:)

War es hilfreich?

Lösung

Verwenden Sie einen LEFT JOIN statt einer inneren

eine innere Verknüpfung erfordert Zeilen aus der Tabelle auf beiden Seiten des verbinden.

passende

A LEFT JOIN (oder äußere LEFT JOIN seinen vollen Namen verwenden) wählt alle Zeilen aus der linken Tabelle, und dann passende Zeilen von rechts, null Werte zurückgegeben werden, wenn es keine passenden Zeilen in der rechten Tabelle sind, so wie du fordern.

(Es gibt auch mit dem rechten Outer-Joins, aber der gleiche Effekt kann durch eine Änderung der Bedingungen um in der ON-Klausel erreicht werden)

Andere Tipps

SELECT n.title, v.value FROM posts n LEFT JOIN votes v ON n.id = v.id

SELECT n.title, v.value FROM Beiträge als n, Stimmen wie v WHERE n.id = v.id

Versuchen Sie das mal.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top