En gérant une boutique en ligne, vous pouvez rencontrer des situations où vous devez récupérer des données de plusieurs tables, telles que en tant que catégories et produits. Cependant, des problèmes surviennent lorsque toutes les lignes d’un tableau n’ont pas d’entrées correspondantes dans l’autre. Pour résoudre ce scénario, explorons comment sélectionner les données de deux tables, en garantissant que toutes les lignes sont renvoyées, même si elles manquent de correspondances.
Considérons deux tables, une pour les catégories avec colonnes id et title et l'autre pour les produits avec les colonnes id, OwnerID, Title et Price, où OwnerID fait référence à l'ID de la catégorie parent. À l'aide de la requête suivante, vous souhaitez récupérer toutes les catégories ainsi que les prix minimum et maximum pour chaque catégorie :
SELECT sc.*, MIN(s.price) AS minp, MAX(s.price) AS maxp FROM categories AS sc, products AS s WHERE s.ownerid = sc.id GROUP BY sc.id
Cependant, cette requête récupère uniquement les catégories auxquelles sont associés des produits. Ceux sans aucun produit sont omis, laissant des résultats incomplets.
Pour résoudre ce problème et assurer la sélection de toutes les catégories, qu'elles aient ou non des produits correspondants, nous utilisons un concept connu sous le nom de la « jointure externe ». Essentiellement, une jointure externe inclut les lignes d'une table même si elles n'ont pas de correspondance dans l'autre table.
En utilisant la syntaxe LEFT JOIN, nous modifions notre requête comme suit :
SELECT sc.*, IFNULL(MIN(s.price), 0) AS minp, IFNULL(MAX(s.price), 0) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
Avec cette requête mise à jour, vous pouvez récupérer toutes les catégories et leurs prix minimum et maximum respectifs. Les catégories sans produits auront des valeurs minp et maxp de 0, satisfaisant à l'exigence d'inclure toutes les catégories.
Au lieu d'utiliser 0 comme valeur par défaut pour les catégories vides, vous pouvez choisir pour renvoyer null à la place. L'utilisation de 0 ou de null dépend des exigences spécifiques de votre application.
En maîtrisant les concepts de jointures externes et en gérant les valeurs nulles dans MySQL, vous pouvez extraire efficacement les données de plusieurs tables, garantissant ainsi l'exhaustivité et l'exactitude de votre résultats.
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!