2013-07-10 45 views
0

由於我正在轉向獅身人面像搜索引擎來提升我的ebsite性能,我正在嘗試將舊的mysql查詢翻譯成新的獅身人面像語言。獅身人面像搜索字段間的數學運算

問題是根據投票與我的帖子之間的數學運算和每個投票(從1到5)給出的要點對結果進行排序。例如,如果我得到3票的投票,我得到了投票1 = 5分投票2 = 3分和投票3 = 2分,我的表將包含名爲投票的字段,整數= 3(票數= 3) )和一個整數爲5 + 3 + 2(分數= 10)的字段。

由於這個最後的評級等職位將是分/票,在這個例子中這將是10/3 = 3333 ...

假設我使用的是獅身人面像API來獲取列表最受好評的職位按降序排列,這是舊版本的MySQL查詢我對我的PHP腳本:

mysql_query("SELECT * FROM table ORDER BY points/votes DESC LIMIT $start,$stop"); 

我試圖建立一個獅身人面像的查詢,但它不能正常工作並始終給予0的結果。請仔細閱讀描述我所做的所有嘗試的//註釋行。

require("sphinxapi.php"); 
$cl = new SphinxClient; 
$index = index; 
$cl->setServer("localhost", 9312); 
$cl->SetMatchMode(SPH_MATCH_FULLSCAN); 
//$cl->SetSortMode(SPH_SORT_EXTENDED, 'IDIV(points,votes) DESC'); //not working 
//$cl->SetSortMode(SPH_SORT_EXTENDED, '(points DIV votes) DESC'); //not working 
//$cl->SetSortMode(SPH_SORT_EXTENDED, 'points/votes DESC'); //not working 
//$cl->SetSortMode(SPH_SORT_EXTENDED, '(points/votes) DESC'); //not working 
$cl->setLimits($start,$stop,$max_matches=1000); 
$query = ""; 

請你幫我找出有什麼問題......謝謝。

+0

您需要使用'SPH_SORT_EXPR'來使用算術表達式 – DevZer0

+0

我已經嘗試過SPH_SORT_EXPR,並且我得到了零結果的確如此 – Sevy

+0

它不會影響您的選擇排序如何給您0結果? – DevZer0

回答

0

您將需要使用SPH_SORT_EXPR

$cl->SetSortMode(SPH_SORT_EXPR, '(points/votes) DESC'); 
+0

我已經試過SPH_SORT_EXPR,結果確實是零 – Sevy

0

首先你需要分票是Attributes,不fields。屬性被存儲在索引中,可用於排序等算法只能在數值屬性(而不是字符串)進行

SPH_SORT_EXPR(假設你已經獲得的屬性)正確的語法將

$cl->SetSortMode(SPH_SORT_EXPR, 'points/votes'); 

SPH_SORT_EXPR總是降序,所以你不需要DESC。

但不是讓獅身人面像每次計算一次比例,你會在sql_query期間更好地計算並將其存儲爲單個數字屬性。提示:存儲爲整數,而不是浮點數。整數更有效地排序。