astroma
Messages postés27Date d'inscriptionmercredi 16 mai 2012StatutMembreDernière intervention 1 septembre 2012
-
21 juin 2012 à 08:00
astroma
Messages postés27Date d'inscriptionmercredi 16 mai 2012StatutMembreDerniè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.
Lyle56
Messages postés240Date d'inscriptionjeudi 1 mai 2008StatutMembreDernière intervention19 juillet 20122 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.
Lyle56
Messages postés240Date d'inscriptionjeudi 1 mai 2008StatutMembreDernière intervention19 juillet 20122 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)
);
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
astroma
Messages postés27Date d'inscriptionmercredi 16 mai 2012StatutMembreDerniè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.