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
Merci d'avance

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

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

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