Ich muss alle Standardeinstellungen aus der Einstellungstabelle abrufen, aber auch die Zeicheneinstellung abrufen, falls für x Zeichen vorhanden.
Diese Abfrage ruft jedoch nur die Einstellungen ab, bei denen das Zeichen = 1 ist, nicht die Standardeinstellungen, wenn der Benutzer niemanden festgelegt hat.
SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT JOIN `character_settings`
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1'
Also sollte ich so etwas brauchen:
array(
'0' => array('somekey' => 'keyname', 'value' => 'thevalue'),
'1' => array('somekey2' => 'keyname2'),
'2' => array('somekey3' => 'keyname3')
)
Wobei Schlüssel 1 und 2 die Standardwerte sind, wenn Schlüssel 0 den Standardwert mit dem Zeichenwert enthält.
quelle
Möglicherweise ist es einfacher zu verstehen, wenn Sie eine einfache Unterabfrage verwenden
Die Unterabfrage darf null zurückgeben, sodass Sie sich in der Hauptabfrage keine Gedanken über JOIN / WHERE machen müssen.
Manchmal funktioniert dies in MySQL schneller , aber vergleichen Sie es mit dem LEFT JOIN-Formular, um zu sehen, was für Sie am besten funktioniert.
quelle
Das Ergebnis ist basierend auf der SQL-Anweisung korrekt. Der linke Join gibt alle Werte aus der rechten Tabelle und nur übereinstimmende Werte aus der linken Tabelle zurück.
ID- und NAME-Spalten stammen aus der rechten Seitentabelle und werden daher zurückgegeben.
Die Punktzahl stammt aus der linken Tabelle und 30 wird zurückgegeben, da sich dieser Wert auf den Namen "Flow" bezieht. Die anderen Namen sind NULL, da sie sich nicht auf den Namen "Flow" beziehen.
Das Folgende würde das erwartete Ergebnis zurückgeben:
Die SQL wendet einen Filter auf die rechte Tabelle an.
quelle
Für dieses Problem, wie für viele andere, die nicht triviale Linksverknüpfungen beinhalten, wie z. B. Linksverknüpfungen in Tabellen mit inneren Verknüpfungen, finde ich es bequemer und etwas lesbarer, die Abfrage mit einer
with
Klausel zu teilen . In Ihrem Beispielquelle