IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mettre un score (valeur) sur une requête avec LIKE


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut Mettre un score (valeur) sur une requête avec LIKE
    Bonjour

    Je souhaite avoir un "score" sur mes requetes pour avoir un ordre d'affichage sur la pertinence de la recherche
    (oui il y a fulltext que j'utilise, mais si la pertinence de mon fulltext j'aimerai switcher sur du like)

    Donc j'ai cherché en vain et j'ai rien trouvé.. comme je ne suis pas un expert de la chose
    pensez-vous que cette partie ci-dessous pourrait faire l'affaire, si oui comment formuler cette partie correctement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT nomsite, description, mcles, texte, 
    (((nomsite LIKE '%$motsy%') * 2) +
    ((description LIKE '%$motsy%') * 3) +
    ((mcles LIKE '%$motsy%') * 1) +
    ((texte LIKE '%$motsy%') * 5)) score FROM $tableannu
    ORDER BY score DESC
    D'avance merci de votre aide
    Cordialement

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    je n'ai peut être pas compris mais les recherches de pertinences s'effectuent avec MATCH AGAINST comme évoqué dans la doc

  3. #3
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Re,

    Oui effectivement, mais je cherche à faire l'équivalence ou presque avec du like... (pour le fulltext tout est ok)

    Le pb avec fulltext, c'est que les boléeans sont à rajouter par la suite... de ce genre ; pom* pour pomme , pommier etc... et donc si je cherche le terme pom, le fulltext ne va rien me retourner c'est pour cela que je souhaiterais switcher sur du like si le résultat est null avec fulltext

    Du reste, j'arrive le faire en like tout simplement mais mon pb est l'ordre d'affichage, je souhaite savoir comment ajouter des "scores" à chacune des requetes pour proposer un ordre d'affichage autre que par l'id ou le titre... soit avec un ordre d'affiche selon la pertinence des scores

    Donc dans l'exemple ci-dessus, je sais pas comment le coder.. pour autant que ça existe comme solution...

    D'avance merci
    Yule

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    En lui accordant un alias, et utiliser cet alias dans le ORDER BY, théoriquement ça devrait fonctionner.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT nomsite, description, mcles, texte, ... blablabla score AS tri_score
    FROM table
    WHERE ... blablabla ...
    ORDER BY tri_score
    score était déjà un alias en faite, non ?

  5. #5
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Re,

    Euh non, score est une fonction (j'ai repris du fulltext pour essayer de l'adapter sur du Like)

    voilà mon full text (qui fonctionne très bien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     $query = "SELECT id, nomsite, description, mcles, url, texte,( 	
      	 (2.95 * (MATCH (nomsite) AGAINST ('$mots2' IN BOOLEAN MODE))) 	
      	  + (1.85 * (MATCH (description) AGAINST ('$mots2' IN BOOLEAN MODE))) 	
      	  + (1.05 * (MATCH (mcles) AGAINST ('$mots2' IN BOOLEAN MODE))) 	
      	  + (1.75 * (MATCH (url) AGAINST ('$mots2' IN BOOLEAN MODE)))
          + (2.50 * (MATCH (texte) AGAINST ('$mots2' IN BOOLEAN MODE)))	  ) AS relevance FROM $tableannu 	
      	  WHERE ( MATCH (nomsite , description, mcles, url, texte) AGAINST ('$mots2' IN BOOLEAN MODE) ) AND valid='0' HAVING relevance > 0 ORDER BY relevance DESC LIMIT $debut,$limit";
    Comment avoir l'équivalence de ce code avec du Like ?

    Est-ce que ce code pourrait faire l'affaire ? ou c'est tout faux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = "SELECT id, nomsite, description, mcles, url, texte,( 
    (((nomsite LIKE '%$motsy%') * 1.85) +
    ((description LIKE '%$motsy%') * 1.05) +
    ((mcles LIKE '%$motsy%') * 1.75) +
    ((texte LIKE '%$motsy%') * 2.50)) AS relevance FROM $tableannu
     WHERE valid='0' HAVING relevance > 0 
     ORDER BY relevance DESC LIMIT $debut,$limit";
    A+
    Yule

Discussions similaires

  1. Je recherche de l'aide sur une requête avec dates
    Par Alain CARDINI dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/05/2008, 22h11
  2. [SQL] Erreur sur une requète avec un Like
    Par heruwenli dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/05/2007, 14h29
  3. Réponses: 5
    Dernier message: 06/01/2007, 04h48
  4. [VBA] Erreur sur une requête avec un opérateur
    Par elgringo2007 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/07/2006, 17h12
  5. Mettre à jour la franchise sur une requête
    Par soso78 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/10/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo