使用 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中文网其他相关文章!