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
Libérer: 2025-01-22 07:56:10
original
1022 Les gens l'ont consulté

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 :

SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT JOIN `character_settings` 
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1'
Copier après la connexion

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 :

SELECT `settings`.*, `character_settings`.`value`
FROM `settings`
LEFT JOIN `character_settings` 
ON `character_settings`.`setting_id` = `settings`.`id`
AND `character_settings`.`character_id` = '1'
Copier après la connexion

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 :

$result = array();
foreach ($result_set as $row) {
    $result[$row['key']] = $row['value'];
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal