J'avais un souci de MATCH AGAINST en fulltext que j'ai réussi à solutionner mais du coup il me reste un petit souci de ORDER sur ma requête:
C'est une requête concaténée dynmaiquement en fonction d'un array de mots, je vous en montre un exemple de génération
voici le type de requête
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 SELECT * FROM (SELECT id_art AS idprod, art.des1_art AS desi, art.desc_art AS descr, art.util_art AS util, cap.caption_rub AS mainrub, rub.caption_rub AS subrub, (des1_art LIKE "%ris p%") *10000 + MATCH ( des1_art ) AGAINST ( "ris +p" ) *1000 + MATCH ( keywords_art ) AGAINST ( "ris" ) *100 + MATCH ( desc_art ) AGAINST ( "ris" ) *10 + MATCH ( util_art ) AGAINST ( "ris" ) AS Rank FROM articles AS art LEFT OUTER JOIN rubriques AS rub ON art.rub_art = rub.id_rub LEFT OUTER JOIN rubriques AS cap ON cap.id_rub = rub.principal_rub WHERE MATCH ( des1_art, desc_art, util_art, keywords_art ) AGAINST ( "ris" IN BOOLEAN MODE ) OR art.des1_art LIKE "%ris%" ) T ORDER BY Rank DESC LIMIT 50
Je couvre le WHERE avec un like pour étendre à la chaine complète et je rajoute aussi un like * 10000 au Rank.
En console Mysql ça marche parfaitement
Le souci maintenant c'est que sur le site au travers de php il ne tient pas comte de l'ORDER by Rank
j'ai 4 enregistrements dans mon résultat de requête.
En console mes enregistrements sont bien ordonnés
10000
0
0
0
Mais, lorsque je boucle dessus avec php pour afficher le Rank j'obtiens
0
10000
0
0
Je ne m'explique absolument pas ce comportement
Partager