Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
bonjour,
je souhaite effectuer une requête de recherche fulltext par l'intermédiaire de Zend Framework avec les $select->from, where, having, etc. et trier les résultats par la pertinence définie par mysql, donc par MATCH(toto) AGAINST('ma recherche'). Donc je rajoute un order('pertinence DESC'). Le problème c'est que cela me renvoie une erreur SQL, me disant que le champ pertinence n'a pas été trouvé. Pourtant, je l'ajoute bien dans la liste des champs en troisième paramètre de $select->from. Si je change la variable du order pour trier par titre par exemple, il n'y a plus d'erreur SQL. Je fais un print_r des résultats et l'élément 'pertinence' existe pourtant bien dans les tableaux d'enregistrements.
Quelqu'un a-t-il une idée ?
Merci
Hors ligne
et si tu fait un un affichage de ta requête ça donne quoi ? Voir un peu ou le prob se situe dans la requête qu'il construit.
echo $select;
Hors ligne
Salut, merci de ta réponse, en fait j'ai du mal à voir en faisant ce fameux echo justement. J'ai l'impression que le constructeur de requête de Zend ajoute une parenthèse, mais pas au bon endroit.
Requête censée être générée et qui fonctionne :
SELECT `r`.`*` , ( ( 1.3 * ( MATCH ( title, summary ) AGAINST ( 'test' IN BOOLEAN MODE ) ) ) + ( 0.6 * ( MATCH ( title, summary ) AGAINST ( 'test' IN BOOLEAN MODE ) ) ) ) AS relevance FROM ma_table AS r WHERE ( MATCH ( title, summary ) AGAINST ( 'test' IN BOOLEAN MODE ) ) HAVING relevance >0 AND ( active = '1' ) ORDER BY relevance DESC LIMIT 0 , 30
Requête créée par le zend Framework, qui ne fonctionne pas
SELECT r.*, ( 1.3 * ( MATCH ( r.summary ) AGAINST ( 'test' IN BOOLEAN MODE ) ) ) + ( 0.6 * ( MATCH ( title ) AGAINST ( 'test' IN BOOLEAN MODE ) ) ) AS `relevance` FROM `ma_table` AS `r` WHERE MATCH ( r.title, r.summary ) AGAINST ( "test" IN BOOLEAN MODE ) AND ( active= '1' ) HAVING ( relevance > 0 ) ORDER BY `r`.`relevance` DESC
Avec la requête générée par le Zend Framework, relevance n'est pas considéré comme un enregistrement récupéré. Je me suis dit que ça pouvait être dû au calcul effectué pour le champ relevance, mais en faisant simplement une récupération de match(title,summary) AS relevance, la requête ne fonctionne pas non plus.
En remplaçant le order by relevance par un autre order, la requête fonctionne. Et si je fais un print_r des résultats, l'enregistrement "relevance" est bien affiché dans chaque ligne de tableau.
Merci de votre aide
Dernière modification par Cidrolin (18-01-2009 09:44:53)
Hors ligne
Salut,
Apparement dans le code généré tu as un ORDER BY `r`.`relevance` DESC
ce qui ne peut pas fonctionner avec le r.
Par contre, de souvenir, il n'y a pas un moyen de faire un order par le numéro de colonne?
Hors ligne
tu as raison, c'était ça.
J'ai pas compris comment j'ai fait pour débugguer dans tous les sens et sans même avoir enlevé ce fichu r :S Je suis le roi pour débugguer à l'envers.
Merci
Désolé du dérangement.
Hors ligne