Maison >base de données >tutoriel mysql >Comment puis-je récupérer efficacement les paramètres par défaut et spécifiques aux caractères à l'aide d'une jointure gauche ?

Comment puis-je récupérer efficacement les paramètres par défaut et spécifiques aux caractères à l'aide d'une jointure gauche ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-22 07:56:101023parcourir

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

Rejoindre à gauche à l'aide de la clause WHERE : obtenez les paramètres par défaut et spécifiques au rôle

La requête de l'application doit récupérer les paramètres par défaut de la table « paramètres » et capturer les paramètres spécifiques aux caractères de la table « character_settings », le cas échéant. Toutefois, la requête actuelle renvoie uniquement les paramètres avec l’ID de rôle 1 et le paramètre par défaut est manquant.

La requête initiale tente d'utiliser la clause WHERE pour filtrer les paramètres où existent les ID de rôle :

<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>

Cependant, cela filtrera les lignes avec des jointures gauches incompatibles, supprimant ainsi la valeur par défaut souhaitée.

Solution :

Pour résoudre ce problème, déplacez la clause WHERE pour joindre uniquement les lignes où existent des paramètres de rôle correspondant :

<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>

La requête collecte désormais les paramètres par défaut et les paramètres spécifiques au rôle, le cas échéant. Une structure de tableau de sortie mixte avec des valeurs par défaut et des valeurs de rôle peut être créée comme suit :

<code class="language-php">$result = array();
foreach ($result_set as $row) {
    $result[$row['key']] = $row['value'];
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn