Page 1 sur 1

Optimisation de requetes

Posté : 23 déc. 2005, 20:44
par Shrell
Salut tout le monde!
J'ai un petit probleme avec des requetes MySQL, je m'explique.
La structure de mes tables:

Code : Tout sélectionner

biens : id_bien, id_type, id_secteur types : id_type, type secteur : id_secteur, secteur contacts : id_contact, id_type_recherche1, id_type_recherche2, id_type_recherche2, id_secteur_recherche1, id_secteur_recherche2, id_secteur_recherche3
Quand j'affiche mes contacts, pour afficher les recherches pour l'instant je fais six requetes qui vont chercher les correspondances de chaque id.
J'aimerais savoir si je peux, en une seule requete, récupérer les correspondances pour chaque recherche.
J'espère que je m'explique bien :oops:
Merci d'avance :D

Posté : 24 déc. 2005, 00:11
par Shrell
Ca y est j'y suis arrivé... quelle galère...
Bon au cas où ça puisse aider quelqu'un, je m'en suis sorti avec des subselect, ce qui nous donne :

Code : Tout sélectionner

"SELECT contacts.*, negociateurs.nom_nego, origines.origine, (SELECT secteurs.secteur FROM contacts LEFT JOIN secteurs ON contacts.id_secteur1=secteurs.id_secteur WHERE contacts.id_contact='$id') as secteur1, (SELECT secteurs.secteur FROM contacts LEFT JOIN secteurs ON contacts.id_secteur2=secteurs.id_secteur WHERE contacts.id_contact='$id') as secteur2, (SELECT secteurs.secteur FROM contacts LEFT JOIN secteurs ON contacts.id_secteur3=secteurs.id_secteur WHERE contacts.id_contact='$id') as secteur3, (SELECT types.type FROM contacts LEFT JOIN types ON contacts.id_type1=types.id_type WHERE contacts.id_contact='$id') as type1, (SELECT types.type FROM contacts LEFT JOIN types ON contacts.id_type2=types.id_type WHERE contacts.id_contact='$id') as type2, (SELECT types.type FROM contacts LEFT JOIN types ON contacts.id_type3=types.id_type WHERE contacts.id_contact='$id') as type3 FROM contacts LEFT JOIN negociateurs ON contacts.id_negociateur=negociateurs.id_negociateur LEFT JOIN origines ON contacts.id_origine=origines.id_origine WHERE contacts.id_contact='$id'"
wala :D

Posté : 26 déc. 2005, 01:38
par ouckileou
Salut,

tu peux te dire qu'à partir du moment où tu as plus de 2 colonnes avec le même nom ( et suivie de 1,2,3...) dans une table, c'est que ta base est mal conçue.

Alors je n'ai pas regardé en détail ce que tu souhaites faire, mais ça n'a pas l'air compliqué et pourtant te reqête est horriblement lourde...

Lorsque tu dois relier une entité (ici Contact) à plusieurs autres (ici Recherches), le schéma de la base doit être 2 tables et 1 relation entre les deux.
Et c'est dans la relation que tu auras une ligne pour chaque lien ;)

Posté : 26 déc. 2005, 02:43
par fab
oué, essaye de voir si tu peux pas simplifier ta base sql ainsi les requetes, cela risque d'allourdir un peu niveau traitement php mais normalement tu en sortiras largement gagnant

Posté : 26 déc. 2005, 14:11
par pjl
Salut,

tu peux te dire qu'à partir du moment où tu as plus de 2 colonnes avec le même nom ( et suivie de 1,2,3...) dans une table, c'est que ta base est mal conçue.
Pas mieux.

Quand je vois celà :

Code : Tout sélectionner

contacts : id_contact, id_type_recherche1, id_type_recherche2, id_type_recherche2, id_secteur_recherche1, id_secteur_recherche2, id_secteur_recherche3
c'est claiur qu'il y a un gros problème de conception de la base de données.

Posté : 26 déc. 2005, 15:11
par Shrell
bah oui mais le client effectue une recherche, et je lui laisse le choix sur 3 secteurs, je vois pas trop comment faire autrement :oops:

Posté : 26 déc. 2005, 15:48
par fab
bah tu fais un champ secteur avec comme value 1 , 2 ou 3

Posté : 26 déc. 2005, 16:01
par Shrell
nan je me suis mal exprimé, y'a un nombre assez élevé de secteurs (une vingtaine en tout je crois) et parmi ces 20 ils en choisissent 3, pareil pour les types... donc je vois pas trop comment faire ça autrement que comme je le fais maintenant