Page 1 sur 1

Requéte dans plusieurs table

Posté : 03 nov. 2007, 12:00
par guillaume40
Bonjour,
J'aimerai faire un moteur de recherche du contenu se trouvant sur mon site.
Et quand on met un mot clé çà cherche ce mot clé dans les tables que je veux dans certaines colones (nom, description,...)
Et que dans la résultat je puisse connaitre de quelle table la donnée vient pour pouvoir mettre les liens aprés.

Voici mes tables :
Video (id,nom,description)
Actualite (id,nom,actu)

Et par exemple si je met le mot clé Bourse sa cherche ce mot clé dans les tables Video, et Actualite dans les colones nom,description et actu et si des résultats sont trouvé pouvoir connaitre le nom de la table.

Je ne sais pas si vous m'avez compris....
Merci d'avance ;)

Posté : 03 nov. 2007, 12:06
par eru
tu peux essayer de faire des jointures, genre :

Code : Tout sélectionner

"SELECT * FROM table1, table2 WHERE table1.champ1 LIKE = '%motcle' OR table1.champ2 LIKE = '%motcle' OR table2.champ1 LIKE = '%motcle' OR table2.champ2 LIKE = '%motcle' ;
C'est un peu laborieux je le concède mais ca devrait marcher...

Posté : 03 nov. 2007, 12:11
par guillaume40
La le probléme c'est que sa retourne tout sur un seul enregistrement :S
Enfin si sa trouve une info dans la table1 et aussi dans la table2 sa fait un seul enregistrement

Posté : 03 nov. 2007, 12:22
par eru
et en faisant deux requêtes séparées? une pour chaque table?
Parce que si je comprends bine, si tu tapes ton mot clé, il faut retrouver toutes les entrées correspondante, quelle que soit la table?

Si tu fais deux requêtes, c pas beaucoup plus long, et tu sais automatiquement d'où vient l'entrée non?

Posté : 03 nov. 2007, 12:39
par guillaume40
Ouai ta raison je vais pas m'enbéter je vais faire comme çà.
Merci ;)

Posté : 03 nov. 2007, 12:39
par eru
bin j'ai jamais vu faire... essaye lol, mais je pense pas que ça marche.... perso je ne m'y risquerais pas

pourquoi ne pas en faire deux a la suite comme pour les requêtes?

situ souhaites vraiement tou faire 'un coup voici une solution mais je ne suis pas convaincu....

Code : Tout sélectionner

$a[0][0] = "resultats de ta première requete"; $a[1][0] = "resultats de ta deuxieme requete"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } }
enfin un truc dans le genre.... Il doit exister un sytème plus simple, mais là je vois pas trop....

Posté : 03 nov. 2007, 13:10
par Sékiltoyai
Tu peux faire une UNION :

Code : Tout sélectionner

(SELECT 'table1' as nom_table, * FROM table1 WHERE table1.champ1 LIKE = '%motcle' OR table1.champ2 LIKE = '%motcle' ) UNION (SELECT 'table2' as nom_table, * FROM table2 WHERE table2.champ1 LIKE = '%motcle' OR table2.champ2 LIKE = '%motcle' )
Ca te renvoie tout en une seule requète, les 'table1' as nom_table et 'table2' as nom_table, te permettant d'identifier de quelle table provient l'enregistrement. Et tu peux utiliser les clauses d'ordre et de limite sur le résultat aussi…

@eru : Les requètes multiples c'est une fonction spéciale et je crois qu'elle ne renvoie le résultat que de la dernière requète…

Posté : 03 nov. 2007, 13:19
par eru
@Sékiltoyai : merci, je ne connaissais pas le mot clé UNION, j'ai donc induit guillaume dans un mur :oops:

toutes mes confuses guillaume :D

Posté : 03 nov. 2007, 13:22
par Sékiltoyai
On ne peut pas tjs tout connaître :-/

Posté : 03 nov. 2007, 13:27
par eru
si il faut etre un Mago :wink: