Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
949 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Utiliser IF pour affiner un ORDER BY en MySQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utiliser IF pour affiner un ORDER BY en MySQL

n°2078533
mechkurt
Posté le 26-05-2011 à 17:35:03  profilanswer
 

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
mood
Publicité
Posté le 26-05-2011 à 17:35:03  profilanswer
 

n°2078588
Oliiii
Posté le 27-05-2011 à 07:52:49  profilanswer
 

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.

n°2078597
mechkurt
Posté le 27-05-2011 à 08:47:01  profilanswer
 

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".

n°2078643
Oliiii
Posté le 27-05-2011 à 13:47:06  profilanswer
 

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.

n°2079009
mechkurt
Posté le 30-05-2011 à 09:23:04  profilanswer
 

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]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Utiliser IF pour affiner un ORDER BY en MySQL

 

Sujets relatifs
Problème de requête MySQL[RESOLU]Quel type de jointure pour ceci ?
[MySQL] Répartir des données dans plusieurs tablesError MySQL.
[MySQL] Copier une table distante"Lier" 2 tables MySQL
Inserer des données dans mysql au format latin 1 avec phpMigrer Access vers MySQL... quelle galère !
comment utiliser sizeof( )[Php/Sql] Problème Order By
Plus de sujets relatifs à : Utiliser IF pour affiner un ORDER BY en MySQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR