使用 WHERE 子句的 Left Join:取得預設設定和角色特定設定
應用程式查詢需要從 'settings' 表中檢索預設設置,並在存在的情況下從 'character_settings' 表中捕獲角色特定設定。但是,目前查詢僅傳回角色 ID 為 1 的設置,而缺少預設設定。
最初的查詢嘗試使用 WHERE 子句來過濾存在角色 ID 的設定:
<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>
但是,這會過濾掉左連接不匹配的行,從而刪除所需的預設設定。
解:
為了解決這個問題,將 WHERE 子句重新定位到僅連接存在匹配角色設定的行:
<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>
現在,查詢收集預設設定和角色特定設定(如果存在)。 可以如下建立具有預設值和角色值的混合輸出數組結構:
<code class="language-php">$result = array(); foreach ($result_set as $row) { $result[$row['key']] = $row['value']; }</code>
以上是如何使用左連接有效檢索預設和特定於字元的設定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!