使用 LEFT JOIN 高效檢索預設和特定於字元的設定
此範例示範如何使用 LEFT JOIN
擷取預設設定以及(如果適用)特定於字元的覆蓋。 原始查詢僅傳回特定於字元的設置,不包括預設值。
檢索兩者的關鍵是正確定位 WHERE
子句。不要在連接之後過濾,而是將角色ID過濾器合併到連接條件中:
<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>
此修改後的查詢在 LEFT JOIN
和 settings
表之間執行 character_settings
。 ON
子句確保僅連接匹配的 setting_id
,並進一步將連接限制為 character_id
為「1」的記錄。 至關重要的是,LEFT JOIN
保證 settings
表中的所有行都包含在結果中,即使 character_settings
中沒有匹配的行。
產生的資料集將類似於以下內容:
<code class="language-php">array( 0 => array('somekey' => 'keyname', 'value' => 'thevalue'), // Default + Character-specific (if exists) 1 => array('somekey2' => 'keyname2', 'value' => null), // Default only 2 => array('somekey3' => 'keyname3', 'value' => null) // Default only );</code>
具有非空白 value
的行表示預設設定和特定於字元的設定。 NULL
欄位中的 value
值表示該特定鍵僅存在預設設定。
以上是如何使用 LEFT JOIN 檢索預設和特定於字元的設定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!