Angenommen, Sie müssen Standardeinstellungen aus der Tabelle „Einstellungen“ abrufen, aber auch überschriebene Rolleneinstellungen einbeziehen. Ihre vorhandene Abfrage ruft jedoch nur Einstellungen ab, die die Rolle explizit festlegen, mit Ausnahme von Standardwerten.
Um dieses Problem zu lösen, können wir die Abfrage ändern, um die gewünschten Ergebnisse zu erhalten. Anstatt über eine WHERE-Klausel zu filtern (die Zeilen ausschließen würde, in denen der linke Join fehlgeschlagen ist), verschieben wir die Bedingung in den Join selbst:
<code class="language-sql">SELECT `settings`.*, `character_settings`.`value` FROM `settings` LEFT JOIN `character_settings` ON `character_settings`.`setting_id` = `settings`.`id` AND `character_settings`.`character_id` = '1' </code>
Durch das Verschieben der Bedingung in den Join stellen wir sicher, dass der Left-Join nur erfolgreich ist, wenn rollenspezifische Einstellungen vorhanden sind, und wenn diese nicht überschrieben wurden, bleiben die Standardeinstellungen weiterhin erhalten. Dies führt zum gewünschten Ergebnis:
<code class="language-php">array( '0' => array('somekey' => 'keyname', 'value' => 'thevalue'), '1' => array('somekey2' => 'keyname2'), '2' => array('somekey3' => 'keyname3') )</code>
Während die Schlüssel 1 und 2 Standardwerte darstellen, enthält Schlüssel 0 den Standardwert, erweitert um rollenspezifische Werte.
Das obige ist der detaillierte Inhalt vonWie kann ich mit einem LEFT JOIN Standardeinstellungen und zeichenspezifische Überschreibungen abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!