Mysql : requete complexe ou multitude de requete ?
Bonjour,
je viens de passer la journée à traiter une requête complexe (outer join) pour tenter de résoudre un pb de délai de génération d'une page...
résultat : AU SECOURS C'EST PIRE !!! 8O
Voici ma problématique
j'ai 2 tables (importantes env 4000 à 5000 enregistrements) :
une table producteur avec des producteur lié à un utilisateur (id=$IdUser) et d'autres communs (id=99999999) :
dans mon ancien script :
SELECT
p1.Idproducteur, p1.Nom, p1.Ville, p1.IdUser
FROM table1
WHERE (p1.IdUser=$IdUser OR p1.IdUser=999999999)
jusque là pas de pb,
puis pour chaque p1.Idproducteur je vérifie s'il l'utilisateur a des produits...
deuxieme sql : SELECT COUNT(*) FROM table2 WHERE Idproducteur=$Idproducteur AND IdUser=$IdUser
moralité : + de 250 accès SQL... génération de page en 2.5 secondes, un monde :evilred:
je me dis donc qu'un seul sql rapatriant la liste
p1.Idproducteur, p1.Nom, p1.Ville, p1.IdUser
avec le nombre de produits de l'utilisateur à coté (1 ou 0 important car je dois aussi extraire les producteurs sans produit), et c'est gagné :
Voilà le résulat :
SELECT DISTINCT p1.Idproducteur, p1.Nom, p1.Ville, p1.IdUser, case when p2.Nombre>0 then 0 else 1 end as nombreprod
FROM table1 AS p1 LEFT OUTER JOIN table AS p2 ON (p1.IdProducteur=p2.IdProducteur and p2.IdUser=$IdUser)
WHERE (p1.IdUser=$IdUser OR p1.IdUser=999999999)
nombreprod = 0 si il a des produits, 1 s'il en a pas
ET CA MARCHE TRES BIEN !!! :yaisse2:
et là je rigole : durée du script : 14 secondes (contre 2.5 avant !) 8O
A moi !