如何在sphinx上通过sql命令选择第一个前20行按标题WEIGHT排序,然后在同一个sql命令中按标题ASC(总共40个结果)排序,但不要给出重复的标题输出。
我尝试这个sql命令,但所有标题结果都是通过WEIGHT()
的顺序$sql = "SELECT *,MAX(WEIGHT()) AS tpw FROM vids_tab
WHERE MATCH('@title " . mysql_real_escape_string( 'fun | funny | today funny' ) . "')
GROUP 5 BY title ORDER BY tpw DESC, title ASC LIMIT 40 OPTION max_matches=40";
答案 0 :(得分:0)
说实话,在单个查询中并没有真正看到这是实用的。只需发出两个查询。然后删除应用程序中的任何重复项。
在第二个确保结果数量增加一倍,所以即使需要删除20个重复项,仍然会有20个。
如果确实需要一个命令,那么就认为需要一个UDF。在特定问题上,需要知道前20个结果的权重范围(因此可以创建一个虚拟列进行排序(即知道行是否在前20个结果中)
... ORDER BY IF(WEIGHT() BETWEEN topweight AND bottomweight, WEIGHT(), 0 ) DESC , title ASC
(ISN'一个有效的sphinxQL命令,只是展示了需要模拟的内容)所以前20个按重量排序,非第一个会得到相同的值,然后按标题排序。