Left Join mit WHERE-Klausel: Standard- und rollenspezifische Einstellungen abrufen
Die Anwendungsabfrage muss die Standardeinstellungen aus der Tabelle „settings“ abrufen und die zeichenspezifischen Einstellungen aus der Tabelle „character_settings“ erfassen, falls vorhanden. Die aktuelle Abfrage gibt jedoch nur Einstellungen mit der Rollen-ID 1 zurück und die Standardeinstellung fehlt.
Die erste Abfrage versucht, die WHERE-Klausel zu verwenden, um Einstellungen zu filtern, in denen Rollen-IDs vorhanden sind:
<code class="language-sql">SELECT `settings`.*, `character_settings`.`value` FROM (`settings`) LEFT JOIN `character_settings` ON `character_settings`.`setting_id` = `settings`.`id` WHERE `character_settings`.`character_id` = '1'</code>
Dadurch werden jedoch Zeilen mit nicht übereinstimmenden linken Verknüpfungen herausgefiltert und somit der gewünschte Standard entfernt.
Lösung:
Um dies zu beheben, verschieben Sie die WHERE-Klausel so, dass sie nur Zeilen verbindet, in denen übereinstimmende Rolleneinstellungen vorhanden sind:
<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>
Die Abfrage erfasst nun Standardeinstellungen und rollenspezifische Einstellungen, sofern vorhanden. Eine gemischte Ausgabe-Array-Struktur mit Standard- und Rollenwerten kann wie folgt erstellt werden:
<code class="language-php">$result = array(); foreach ($result_set as $row) { $result[$row['key']] = $row['value']; }</code>
Das obige ist der detaillierte Inhalt vonWie kann ich mit einem Left Join effizient Standard- und zeichenspezifische Einstellungen abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!