pourquoi me requet ne fonctionne pas ?

Mammouth du PHP | 620 Messages

19 sept. 2009, 21:15

bonsoir,
j'ai une requette pour un petit moteur de recherche sur mon site qui fonctionne tres bien sauf que le trie (order by) ne fonctionne pas.
voici ma requet :
$resultat=mysql_query("SELECT * FROM IWgalerie WHERE type='$champ' AND match(`ref`,`exemple`,`alt`) against ('$mot') ORDER BY type ASC");

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 sept. 2009, 22:55

Et qu'est ce qui te fait croire que le tri ne fonctionne pas ? :)

Tu demandes de trier les résultats de ta requête suivant la colonne "type" par ordre croissant, mais dans ta requête tu ne récupères que des enregistrements dont le type est égal à $champ....
Vu que tous les enregistrements ont la même valeur pour le type, ils sont forcément triés ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 sept. 2009, 00:06

Hello,

Pour info, les recherches full-text de MySQL te renvoie un score de pertinence qui permet de classer les résultats du plus pertinent au moins pertinent (c'est ce qu'on utilise le + dans un moteur de recherche).
Explications ici:
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 620 Messages

20 sept. 2009, 11:18

ah bon après vos réponses je me suis apercu que j'avais mis mon order by sur la mauvaise requet.
Effectivement sa fonctionne.

autre petite question avant de mettre résolu, peut t'on faire un tri sur plusieurs champs ?
par exemple je tri et j'affiche d'abord en fonction de mon champ 'type' et ensuite en fonction de mon champ 'description'.
de cette maniere j'aurai :

Paysage : automne 2008 les arbres....
paysage : pendant une randonnée sur les crêtes....
Paysage : Sur le lac de longemer...

Villes et villages : autre ville qui dans son...
Villes et villages : la place aux doigts d'or....

Mammouth du PHP | 620 Messages

20 sept. 2009, 11:24

ok j'ai trouvé un solution :
$resultat=mysql_query("SELECT * FROM IWgalerie WHERE match(`ref`,`exemple`,`alt`) against ('$mot') ORDER BY type, ref, alt  ASC");
c'est tout bête !

Mammouth du PHP | 686 Messages

20 sept. 2009, 12:38

Pour l'optimisation le SELECT * ou le SELECT ALL n'est pas très recommandé
Il vaut mieux renseigner tous les champs de ta table
SELECT champ1,champ2,champ3 FROM IWgalerie WHERE match(`ref`,`exemple`,`alt`) against ('$mot') ORDER BY type, ref, alt  ASC