2011-02-06 44 views
1

我正在展示類似於YouTube的視頻的網站上工作。這個網站有一個部分,顯示了使用全文搜索獲得相似的最多十個類似的視頻。Mysql - 如何執行檢索到的類似記錄的數量?

SELECT * , MATCH (`title` , `description`,`videokey`) AGAINST ('$Keywords') AS score 
FROM video 
WHERE MATCH (`title` , `description`,`videokey`) AGAINST ('$Keywords') 
LIMIT 10 

問題是,有時它會檢索少於10個視頻。在這種情況下,當相關視頻少於10個時,是否有辦法強制執行10個視頻,而這些視頻之間並不完全相關?如果沒有,是否有可能通過另一個SELECT基於另一個字段如類別進行查詢。我怎樣才能做到最好,最快捷的方式?

回答

1

不是真的 - 您的查詢需要在對所有候選行進行條件評估之後纔有可能返回多少行,因此返回的行數不能用作條件的參數查詢。

你可以做兩件事情(當然,也許更多,但這裏有兩個):

  • 在你的代碼只需執行第二查詢,當結果行是小於10
  • 去搶另一個的第二個查詢中的十個記錄通過UNION附加到您的第一個查詢中。 http://dev.mysql.com/doc/refman/5.1/en/union.html在你的代碼中,將結果的迭代限制在10以內,而不是結果行大小。

我想說的是第一個(第二個查詢)。第二個數據庫查詢不會殺了你,除非你遭受了一些大規模的閱讀流量,在這種情況下,如果你能提供幫助的話,更好的解決方案就不會打到數據庫。