首页 >数据库 >mysql教程 >如何使用左连接有效检索默认和特定于字符的设置?

如何使用左连接有效检索默认和特定于字符的设置?

Barbara Streisand
Barbara Streisand原创
2025-01-22 07:56:101005浏览

How Can I Efficiently Retrieve Default and Character-Specific Settings Using a Left Join?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn