Inner join avec plusieurs ligne et boolean mode

astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012 - 4 juil. 2012 à 11:25
astroma Messages postés 27 Date d'inscription mercredi 16 mai 2012 Statut Membre Dernière intervention 1 septembre 2012 - 4 juil. 2012 à 16:08
Bonjour,

J'ai déjà écris quelques messages sur ce forum et je me permets de revenir encore vers vous pour essayer d'avoir quelques conseils car à chaque fois ils m'ont été bien utile.

Avant de l'exposer voici ma requete SQL de base qui fonctionnait bien :

("SELECT hist_jr,hist_ms,hist_an,hist_ev,hist_py,hist_vil,hist_lieu,
(MATCH (hist_an) AGAINST ('".$chercher."') + MATCH (hist_ev) AGAINST ('".$chercher."') + MATCH (hist_vil) AGAINST ('".$chercher."')) as score
FROM historique
WHERE
MATCH (hist_an) AGAINST ('".$chercher."' IN BOOLEAN MODE) OR MATCH (hist_ev) AGAINST ('".$chercher."') OR MATCH (hist_vil) AGAINST ('".$chercher."')
ORDER BY SCORE DESC") or die (mysql_error());

Ensuite je les transformé afin de pouvoir faire une jointure avec une deuxième table qui doit renvoyer plusieurs lignes de résultats :

("SELECT hist_jr,hist_ms,hist_an,hist_ev,hist_py,hist_vil,hist_lieu,
(MATCH (hist_an) AGAINST ('".$chercher."' IN BOOLEAN MODE) + MATCH (hist_ev) AGAINST ('".$chercher."' IN BOOLEAN MODE) + MATCH (hist_vil) AGAINST ('".$chercher."'IN BOOLEAN MODE)) as score
FROM (
SELECT *
FROM historique
INNER JOIN musee ON historique.hist_vil=musee.mus_vil
WHERE hist_vil = ('".$chercher."')) as laville
WHERE
MATCH (hist_an) AGAINST ('".$chercher."' IN BOOLEAN MODE) OR MATCH (hist_ev) AGAINST ('".$chercher."' IN BOOLEAN MODE) OR MATCH (hist_vil) AGAINST ('".$chercher."' IN BOOLEAN MODE)
ORDER BY SCORE DESC")

La requête fonctionne mais pas du tout comme je le souhaite.
En fait il faudrait que lorsque hist_vil existe dans la table 1 la requete prenne toutes les lignes correspondantes et certains champs de la table 2 tout en conservant les champs plein de la table 1.

POur l'instant elle ne garde que les hist_vil de la table1.

J'espère avoir été assez clair. Auriez-vous une piste pour résoudre mon problème car je suis perdu.

Merci d'avance

Astroma

2 réponses

Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
4 juil. 2012 à 15:47
Bonjour,

La première idée qui me viens ressemble à ceci :

SELECT histo.*, mus.*,
(MATCH (histo.hist_an,histo.hist_ev,histo.hist_vil) AGAINST ('".$chercher."' IN BOOLEAN MODE) as score
FROM historique histo
INNER JOIN musee as mus ON histo.hist_vill = mus.mus_vill
WHERE MATCH (histo.hist_an,histo.hist_ev,histo.hist_vil) AGAINST ('".$chercher."' IN BOOLEAN MODE)
ORDER BY SCORE DESC")

Pour aller plus loin il faudrait la structure de table pour faire des essais un peut plus poussé.

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
4 juil. 2012 à 16:08
Bonjour,

Je viens de les MP. Merci de m'avoir répondu.

Astroma
0
Rejoignez-nous