Dans les connexions à des bases de données, il est souvent nécessaire de combiner les données de plusieurs tables tout en appliquant certaines conditions de filtrage. Considérez le scénario suivant :
Vous souhaitez récupérer les paramètres par défaut de la table settings
et, si nécessaire, les paramètres spécifiques aux rôles de la table character_settings
pour des rôles spécifiques. Cependant, la requête ci-dessous renvoie la valeur par défaut uniquement si le paramètre de rôle correspond à une valeur spécifique et ignore la valeur par défaut si aucun paramètre de rôle n'est défini :
<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>
Afin de récupérer tous les paramètres par défaut et d'obtenir les paramètres de rôle lorsqu'ils sont disponibles, nous devons déplacer la condition de filtre vers la clause de jointure :
<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>
En plaçant la clause WHERE
dans la condition de jointure, nous spécifions que seules les lignes pour lesquelles la jointure gauche réussit seront incluses dans le jeu de résultats. Cela nous permet de récupérer les paramètres par défaut tout en tenant compte de la possibilité de paramètres spécifiques au rôle.
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!