astroma
Messages postés27Date d'inscriptionmercredi 16 mai 2012StatutMembreDernière intervention 1 septembre 2012
-
4 juil. 2012 à 11:25
astroma
Messages postés27Date d'inscriptionmercredi 16 mai 2012StatutMembreDerniè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.
Lyle56
Messages postés240Date d'inscriptionjeudi 1 mai 2008StatutMembreDernière intervention19 juillet 20122 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.