2017-02-06 1 views
0

J'ai besoin d'exécuter 2 requêtes par une file d'attente et de transmettre le résultat de la première requête à l'expression IF d'une autre requête ainsi qu'aux requêtes MySQL ordinaires.Utilisation de variables personnalisées dans les requêtes Sphinx

Comme exemple, j'essayer passer @average variable dans la deuxième requête:

SET @average=(SELECT AVG(weight()) avg_rank FROM common WHERE match('query text') OPTION ranker=expr('sum(word_count)*100 + sum(lcs*user_weight)*100 + bm25 + sum(exact_order)*200'); 

SELECT *, weight() as rank, 2000 * exp(- 9.594E-5 * abs(1486121357 - _rank_date)/1000) AS date_rank, IF(_importance > @average,_importance,0) AS importance_rank, (rank + date_rank + importance_rank) as total_rank FROM common WHERE match('query text') OPTION ranker=expr('sum(word_count)*100 + sum(lcs*user_weight)*100 + bm25 + sum(exact_order)*200') 

Mais j'eu erreur d'analyse. Comment je peux le faire?

Répondre

0

Ne pensez pas que vous serez en mesure de le faire dans Sphinx en tant que tel.

L'application doit simplement exécuter la première requête, capturer la valeur et l'écrire explicitement dans la deuxième requête. Mais il semble aussi que l'expression jsut modifie de toute façon ce qui est retourné (plutôt que de dire réordonner ou filtrer les résultats), alors plutôt que d'obtenir sphinx pour calculer les expressions IF, il suffit de le faire dans l'application.