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 !!!
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
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 !!!
et là je rigole : durée du script : 14 secondes (contre 2.5 avant !)
A moi !
Partager