Utiliser IF pour affiner un ORDER BY en MySQL

Utiliser IF pour affiner un ORDER BY en MySQL - SQL/NoSQL - Programmation

Marsh Posté le 26-05-2011 à 17:35:03    

Bonjour,
 
Dans la gestion de  ma photothèque, je souhaite faire remonter les recherches textuelles de façon plus précise.
 
Voici un aperçu de ma BDD :

pict_id (int primary)   |    pict_filename_orig (varchar 200 index) |    index_fulltext (text)


 
avec un index fulltext sur les 2 champs textes.
 
Ma requête actuelle quand un gars rentre "ciel bleu.jpg" :

Code :
  1. SELECT * , MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel bleu\\.jpg') AS score
  2. FROM phototek
  3. WHERE MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel* bleu*\\.jpg*' IN BOOLEAN MODE)
  4. ORDER BY score DESC


 
Ça marche pas trop mal sauf que si j'ai 5000 photos avec les mots clés ciel, bleu et jpg dans "index_fulltext", ce n'est pas forcement ciel bleu.jpg qui remonte en premier...
 
J'ai essayé d'ajouter un peu de LIKE('%%') pour pondérer le résultats tout en gardant les avantages du match against :  
 

Code :
  1. SELECT * ,
  2. scorebis = IF(p.pict_filename_orig LIKE('%ciel bleu.jpg%'),1,0),
  3. MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel bleu\\.jpg') AS score
  4. FROM phototek
  5. WHERE MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel* bleu*\\.jpg*' IN BOOLEAN MODE)
  6. ORDER BY scorebis DESC, score DESC


 
Ce qui ne fonctionne pas (sinon je posterais pas ici ^^).
J'ai essayé pas mal de truc sans vraiment trouver et Google ne pas des masses aidé jusqu'à présent...
 
...à vrai dire je ne suis même pas sur que la voie que j'emprunte sois la plus logique.
Au pire je pourrais refaire le tri derrière en PHP mais bon tant qu'a faire.
 
Merci d'avance  :hello:


Message édité par mechkurt le 27-05-2011 à 08:43:31
Reply

Marsh Posté le 26-05-2011 à 17:35:03   

Reply

Marsh Posté le 27-05-2011 à 07:52:49    

Ya pas un equivalent du SOUNDEX (SQL Server)?
Tu pourrais faire un order by SOUNDEX(xxx), etc et ca devrai etre trié dans un ordre un peu plus logique pour oit.

Reply

Marsh Posté le 27-05-2011 à 08:47:01    

Je ne comprends pas trop l'intérêt du SOUNDEX pour le tri, d'autant que ma recherche n'est pas destiné qu'a la recherche de nom de fichier exact.
Je m'attend autant (si ce n'est plus) à ca que l'utilisateur rentre "bleu ciel nuage".

Reply

Marsh Posté le 27-05-2011 à 13:47:06    

Le tri sur SOUNDEX devrai te retourner ce qui semble etre le plus proche en premier, c'est un moyen simple d'eviter de gros problemes mais il a des limitations.
 
Pour le faire a la Google & co. il faut garder le resultat des recherches precedente, comparer a chaque fois et essayer de deviner ce que le gars veut. Pas du tout une balade dans le parc.

Reply

Marsh Posté le 30-05-2011 à 09:23:04    

Désolé mais je ne vois pas ce que tu veux trier par SOUNDEX !?
 
Bon en cherchant un  peu j'ai vu que ma manipulation fonctionnait en mettant le CASE directement dans le ORDER BY :
 

Code :
  1. SELECT * ,
  2. MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel bleu\\.jpg') AS score
  3. FROM phototek
  4. WHERE MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel* bleu*\\.jpg*' IN BOOLEAN MODE)
  5. ORDER BY CASE WHEN p.pict_filename_orig LIKE ('%ciel bleu.jpg%') THEN 0 ELSE 1 END ASC, score DESC


 
 [:azitwaz]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed