MySQL et MATCH as SCORE

MySQL et MATCH as SCORE - PHP - Programmation

Marsh Posté le 05-07-2006 à 20:19:06    

Salut à tous,
J'ai fait une requête MySQL qui fonctionne:

Code :
  1. $rqt_list = "MATCH (keywords) AGAINST (\"$sk\" )";
  2. $requete = mysql_query("SELECT *, $rqt_list AS score FROM $table_image WHERE $rqt_list" );


Mais je souhaite faire la même chose mais sur plusieurs champs, mais ça ne fonctionne pas en ajoutant le champ city:

Code :
  1. $rqt_list = "MATCH (keywords,city) AGAINST (\"$sk\" )";
  2. $requete = mysql_query("SELECT *, $rqt_list AS score FROM $table_image WHERE $rqt_list" );


J'ai bricollé en faisant des MATCH avec OR, mais le AS score devient inutile:

Code :
  1. $rqt_list = "MATCH (keywords) AGAINST (\"$sk\" ) OR MATCH (city) AGAINST (\"$sk\" )";
  2. $requete = mysql_query("SELECT *, $rqt_list AS score FROM $table_image WHERE $rqt_list" );


Une idée ?


Message édité par polo7 le 13-07-2006 à 23:09:55
Reply

Marsh Posté le 05-07-2006 à 20:19:06   

Reply

Marsh Posté le 13-07-2006 à 23:10:43    

Personne n'a d'idée ?

Reply

Marsh Posté le 14-07-2006 à 08:53:39    

pas un probléme de php mais de sql => sql/sgbd
 
Mais pourquoi ne pas faire un $rqt_list et un $rqt_list2 avec un "as" sur chacun? Autre idée, mettre $rqt_list entre parentaise dans la partie select.
 
En bref, faut respecter la syntaxe des requettes sql. Autre idée en passant : quand une requette décone, il faut regarder le message d'erreur retourné par mysql. (voir doc de php)

Reply

Marsh Posté le 14-07-2006 à 10:10:58    

Hello,
Merci pour la réponse, je l'ai déplacé sous PHP car sous SGBD, il n'y avait pas de réponse.
Je ne vois pas quelle est ta proposition avec le $rqt_list2 ?
Pour l'erreur de syntaxe, il n'y en a pas, c'est juste que ça ne me retourne par le résultat par pertinance à cause des OR. Si je fait la même requête sur un seu champ, alors c'est OK.

Reply

Marsh Posté le 14-07-2006 à 10:49:06    

ok, je viens de faire des tests pour voir comment ca marche et je viens de réaliser que "match" retourne un nombre. Une solution à premiére vue, ca serait de faire une somme du nombre retourné par chaque "match" afin d'obtenir une note globale.

Reply

Marsh Posté le 14-07-2006 à 12:06:52    

oui, c'est justement le AS SCORE qui s'en occupe, c'est ça l'avantage, c'est que c'est fait pour trier par pertinence.
Au fait, c'est le deuxième code qui pose PB et l'erreur est:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in
 
Ca ne nous avance pas bcp.

Reply

Marsh Posté le 14-07-2006 à 13:16:26    

J'ai trouvé, pour que cette requête fonctionne, il faut faire un fulltext dans la bdd pour tous les champs concernés en même temps et pas des fulltext séparé.

Code :
  1. $rqt_list = "MATCH (keywords,city) AGAINST (\"$sk\" )";
  2. $requete = mysql_query("SELECT *, $rqt_list AS score FROM $table_image WHERE $rqt_list" );


Message édité par polo7 le 14-07-2006 à 13:17:01
Reply

Sujets relatifs:

Leave a Replay

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