ホームページ >データベース >mysql チュートリアル >左結合を使用してデフォルト設定およびキャラクタ固有の設定を効率的に取得するにはどうすればよいですか?

左結合を使用してデフォルト設定およびキャラクタ固有の設定を効率的に取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-22 07:56:10968ブラウズ

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

WHERE 句を使用した左結合: デフォルトおよびロール固有の設定を取得します

アプリケーション クエリは、「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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。