2015-09-16 40 views
2

我有一個select語句,我需要先按相關性對它進行排序,得到前十個相關性,按rand()命令排序,然後將其限制爲1,但將其限制爲1我不認爲有可能通過2種不同的順序和限制語句來實現。所以,我的問題是,有沒有解決這個問題的方法?謝謝。在SQL中有兩個不同的順序和限制語句

SELECT id, input, response, 
MATCH (
input 
) 
AGAINST (
'cat frogs trees' 
IN NATURAL LANGUAGE 
MODE 
) AS relevance 
FROM allData 
HAVING relevance >0 
ORDER BY relevance DESC 
LIMIT 10 
ORDER BY RAND() 
LIMIT 1 
+0

我建議離開隨機挑到PHP,做休息查詢 –

+0

沒有。在單個查詢中不能有多個'order by'子句,但是您可以按'單個'順序具有多個TERMS。但是由於您的訂購/限制是矛盾的,您不能那樣做。您必須使用子查詢並在每個單獨的查詢中適當地應用限制/排序。 –

回答

2

使用子查詢:

SELECT t.* 
FROM (SELECT id, input, response, 
      MATCH (input) AGAINST ('cat frogs trees' IN NATURAL LANGUAGE MODE) AS relevance 
     FROM allData 
     HAVING relevance > 0 
     ORDER BY relevance DESC 
     LIMIT 10 
    ) t 
ORDER BY RAND() 
LIMIT 1; 
+0

我剛試過。有用。但是有一個小問題。它只選擇SELECT中的第一個。所以在上面的例子中,它只獲取id,而不是輸入,也沒有響應。有沒有辦法來解決這個問題?謝謝。 – jessica

+0

@jessica。 。 。該查詢將返回所有這些值。如果您只獲取一列,則必須位於應用程序層。 –