Inner join avec plusieurs ligne et boolean mode

Signaler
Messages postés
28
Date d'inscription
mercredi 16 mai 2012
Statut
Membre
Dernière intervention
1 septembre 2012
-
Messages postés
28
Date d'inscription
mercredi 16 mai 2012
Statut
Membre
Dernière intervention
1 septembre 2012
-
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
A voir également:

2 réponses

Messages postés
240
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
19 juillet 2012
2
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.
Messages postés
28
Date d'inscription
mercredi 16 mai 2012
Statut
Membre
Dernière intervention
1 septembre 2012

Bonjour,

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

Astroma