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