par
Hubert Roksor » 01 juin 2006, 23:07
je comptais faire une sous-requête pour alléger l'écriture et surtout la génération en PHP
Je ne suis pas certain de comprendre, en quoi ça interfère avec la génération en PHP ? il s'agit avant tout du fonctionnement interne de MySQL, tout ce que PHP voit c'est le résultat (ce qu'on a mis dans "SELECT").
Au fait, en me relisant je me suis aperçu que je ne faisais pas la jointure dans le bon sens. En pratique ça ne change rien parce que le serveur remets les tables dans le bon ordre, mais c'est important à garder en tête, surtout que plus grand est le nombre de jointures et plus dur c'est pour le serveur de trouver le bon ordre. En règle générale, le "bon ordre" c'est de partir de la table dont on connait le champs d'application de la clause "WHERE" et joindre la table dont le champs d'application dépend de la première. En d'autres termes, il y a une table où le seul enregistrement qui nous intéresse correspond à "idPseudo = 2" et une autre qui dépend des informations contenu dans la première.
On part de
p1 et on cherche les informations dans
p2 donc la requête devrait ressembler à:
Code : Tout sélectionner
SELECT p2.*
FROM pseudo p1
JOIN pseudo p2 ON (p2.age > p1.age AND p2.taille > p1.taille)
WHERE p1.idPseudo = 2
[quote="Kariboo"]je comptais faire une sous-requête pour alléger l'écriture et surtout la génération en PHP[/quote]
Je ne suis pas certain de comprendre, en quoi ça interfère avec la génération en PHP ? il s'agit avant tout du fonctionnement interne de MySQL, tout ce que PHP voit c'est le résultat (ce qu'on a mis dans "SELECT").
Au fait, en me relisant je me suis aperçu que je ne faisais pas la jointure dans le bon sens. En pratique ça ne change rien parce que le serveur remets les tables dans le bon ordre, mais c'est important à garder en tête, surtout que plus grand est le nombre de jointures et plus dur c'est pour le serveur de trouver le bon ordre. En règle générale, le "bon ordre" c'est de partir de la table dont on connait le champs d'application de la clause "WHERE" et joindre la table dont le champs d'application dépend de la première. En d'autres termes, il y a une table où le seul enregistrement qui nous intéresse correspond à "idPseudo = 2" et une autre qui dépend des informations contenu dans la première.
On part de [b]p1[/b] et on cherche les informations dans [b]p2[/b] donc la requête devrait ressembler à:
[code]SELECT p2.*
FROM pseudo p1
JOIN pseudo p2 ON (p2.age > p1.age AND p2.taille > p1.taille)
WHERE p1.idPseudo = 2[/code]