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'
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'
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']; }
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!