Question de chemin

Résolu
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012 - 21 juin 2012 à 08:00
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012 - 21 juin 2012 à 10:32
Bonjour à tous,

Ma question est plutôt d'ordre général.

J'ai commencé la programmation en amateur il y a quelques semaines afin d'exploiter un certain nombre de données.

Mon problème est le suivant :

J'ai une BDD avec une table principale d'environ 100.000 lignes avec 9 champs différents dans laquelle j'effectue une recherche sur 3 des champs.

J'ai à coté de ça 7 autres tables sur lesquelles j'effectue actuellement des jointures afin de pouvoir les attacher à la table principale lors des retours de SELECT.
Les 7 tables vont de 3000 lignes pour la plus petites à environ 100.000 lignes pour la plus grosse.

Au début j'ai fait une requête avec LIKE mais après avoir lu pas mal de documents sur le net je suis passé à l'utilisation de WHERE MATCH IN BOOLEAN MODE.

Alors ma question est simple:
Je voulais savoir si j'étais sur la bonne piste où si il existait de meilleurs solutions?

Pour information complémentaire :
Je développe en PHP4 avec un serveur WAMP et phpmyadmin sur mon PC perso. Je pense passer un jour sur PDO pour me connecter à la base mais je ne suis pas encore assez bon en programmation pour le faire. Surtout que visiblement PDO demande le passage en POO pour être réellement efficace, et bien que j'ai lu pas mal de documents dessus me semble encore très flou.

A ceux qui prendront un peu de leur temps pour me répondre un grand merci d'avance.

Astroma

10 réponses

Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
21 juin 2012 à 10:19
Alors on va faire simple :

Req1 -> Select * from A LEFT JOIN B ON A.key = b.key
Je prend tout les champs de la table A et j'y ajoute ceux de la table B si a.key = b.key
Req2 -> Select * from A RIGHT JOIN B ON A.key = b.key
Je prend tout les champs de la table B et j'y ajoute ceux de la table A si a.key = b.key

Ex :
Table A
key Champ
1 A
2 B
3 C

Table B
key Champ
2 D
3 E
4 F

Req1 te donne en résultat
1 - A
2 - B - 2 - D
3 - C - 3 - E
Req2 te donne en résultat
2 - B - 2 - D
3 - C - 3 - E
- 4 - F

Pour avoir des réultats des deux coté il faut utiliser LEFT INNER JOIN.
Tu aura en résultat
2 - B - 2 - D
3 - C - 3 - E




Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
3
cokoboye Messages postés 40 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 11 septembre 2012
21 juin 2012 à 09:01
c'est quoi ta question exactement ?
0
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012
21 juin 2012 à 09:39
Merci de me répondre.

Ma question c'est de savoir si j'ai raison d'utiliser where match plutôt que like.

Et si j'ai tort dans les deux cas avoir une idée de pistes à creuser.

As troma
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
21 juin 2012 à 09:47
Bonjour,

Les joies des requêtes SQL.

Déjà premier point : effectivement le "WHERE MATCH IN BOOLEAN MODE" est plus approprié que le LIKE.
Deuxième point : si tu veut que ta recherche soit efficace, il faut que tes champs de recherche soit en FULLTEXT

 CREATE TABLE articles (
   id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
   title VARCHAR(200),
   body TEXT,
   FULLTEXT (title,body)
 ); 


Je t'invite à lire ceci si tu ne l'as pas fait :
[ http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html Recherche SQL FULLTEXT]


Troisième point : les jointures et plus généralement la structure de ta table.
Si tu veut que tes recherches et jointures soit efficace, il faut que tu t'assure que ta structure de table est correcte. Index / KEY etc; ça peut vite devenir plus complexe que prévue.

Mais la, pour t'aider plus il faudrait les script de création de structure de ta base.

Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012
21 juin 2012 à 10:00
Pour les champs FULLTEXT sur la base principale c'est fais.
J'ai juste un problème que je devrais pouvoir résoudre avec le champ date qui à la mauvaise habitude de prendre le pas sur les autres champs.

Pour le lien c'est sympa et effectivement je l'avais déjà lu. C'est même cette page qui me permet de mettre en place le where match.

Par contre, j'ai plus de mal à comprendre les notion de join left et join right de la documentation. Alors je cherche un tuto et peu plus pédagogique pour un amateur.

Merci pour tes conseils en tout cas.

Astroma
0
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012
21 juin 2012 à 10:22
Merci beaucoup
Tu me laisses la journée pour digérer, j'espère :-))
0
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012
21 juin 2012 à 10:24
Bon et bien en fait c'est super clair. Je m'y attaque.

Merci beaucoup.

Astroma
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
21 juin 2012 à 10:26
Re

J'ai trouver ceci qui peut aussi t'aider.
Aide SQL

Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
21 juin 2012 à 10:30
[i]
Merci beaucoup
Tu me laisses la journée pour digérer, j'espère :-)) /i

Seulement le temps du café !!
Plus sérieusement, j'ai du boulot. Tu as donc largement la journée pour voir tout ceci.



Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012
21 juin 2012 à 10:32
Donc si je veux tout lier à ma table A je fais 6 JOIN LEFT si j'ai bien compris.


Astroma
0
Rejoignez-nous