TRIER une requette avec des jointures ?

Signaler
Messages postés
47
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
23 mai 2006
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour à tous.

Voilà j'ai une petite question. J'ai la requête suivante:



$query_tout= "SELECT id,fr,jp,romaji,kana FROM vocabulaire WHERE ";

    $query_tout.="msearch='".$mot_noAccent."'  ";//FR exact

    $query_tout.="OR jp='".$mot."'  ";//JP exact

    $query_tout.="OR romaji='".$mot_romaji."'  ";//ROMAJI exact

    $query_tout.="OR kana='".$mot."'  ";//KANA exact

    //--//

    $query_tout.="OR msearch LIKE'".$mot_noAccent." %' ";//FR en première position

    //--//

    $query_tout.="GROUP BY id ORDER BY LENGTH(fr) ASC LIMIT 3000 ";




Et je voudrait pouvoir ordonner mes résultats de la manière suivante:

afficher d'abord les résultats pour msearch='".$mot_noAccent."' ,
puis ceux pour jp ='".$mot."' , ensuite ceux pour
romaji='".$mot_romaji."' etc...

est-ce possible de faire ça en une seule requête?

J'ai essayé en faisant des jointures, mais je ne suis pas sur de ma syntaxe ni du résultat:



(exemple pour rechercher le mot "chat")




SELECT id, fr, jp, romaji, kana



FROM vocabulaire Tout




INNER JOIN (



SELECT id AS id_fr



FROM vocabulaire



WHERE msearch = 'chat'



ORDER BY LENGTH( msearch ) ASC



LIMIT 3000



)Tfr ON Tfr.id_fr = Tout.id




INNER JOIN (



SELECT id AS id_jp



FROM vocabulaire



WHERE jp = 'chat'



ORDER BY LENGTH( jp ) ASC



LIMIT 3000



)Tjp ON Tjp.id_jp = Tout.id





INNER JOIN (



SELECT id AS id_fr2



FROM vocabulaire



WHERE msearch LIKE 'chat %'



ORDER BY LENGTH( msearch ) ASC



LIMIT 3000



)Tfr2 ON Tfr2.id_fr2 = Tout.id





ORDER BY id_fr, id_jp, id_fr2 ASC



LIMIT 3000




Quelqu'un pourrait-il m'aider??

Merci d'avance !

2 réponses

Messages postés
47
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
23 mai 2006

Je me réexplique.

Voici ma requête de base:

SELECT id, fr, jp, romaji, kana



FROM vocabulaire



WHERE



fr = 'chat'



OR jp = 'chat'



OR romaji = 'chat'



OR kana = 'chat'



GROUP BY id



ORDER BY LENGTH( fr ) ASC



LIMIT 3000





Dans un premier temps, je veux rechercher un mot dans tout ces champs,
mais il faut absolument ordonner les résultats de façon à ce
qu'apparraissent d'abord les mots trouvés dans FR, puis ceux trouvés
dans JP, puis ceux trouvés dans KANA, puis ceux trouvés dans ROMAJI.




C'est possible?
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



bah avec plusieurs "arguments" à ORDER :



ORDER BY champ1 ASC,champ2 DESC,champ3 ASC



par exemple...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>