2015-06-16 83 views
-1

我使用下面的代碼,在裏面找到獲取隨機行中如果全文結果小於N行

SELECT * FROM table 
    WHERE MATCH(title) AGAINST('php tutorial') LIMIT 25 

如果有符合我查詢的標題,它返回25行。如果該行爲空或者如果少於25行,我想從表中隨機選擇25行。是否有可能在單個查詢

回答

0

相反,使用order bylimit

SELECT * 
FROM table 
ORDER BY MATCH(title) AGAINST('php tutorial') DESC 
LIMIT 25 

注意,這可能是更加昂貴,這取決於你的數據的大小,因爲整個表需要進行排序。

一種更有效的方法是:

select t.* 
from ((select t.*, MATCH(title) AGAINST('php tutorial') as score 
     from table t 
     where MATCH(title) AGAINST('php tutorial') 
     limit 25 
    ) union all 
     (select g.*, -1 as score 
     from table g 
     where NOT (MATCH(title) AGAINST('php tutorial')) 
     limit 25 
    ) 
    ) t 
order by score desc 
limit 25; 

這至多50個記錄限制了整體排列中。就像您最初的查詢一樣,它並不能保證得分最高的冠軍將被退回。

+0

你能解釋什麼是t?我得到錯誤未知表't'? – Vishnu

+0

它是一個表別名。在第二個子查詢中,它應該拼寫爲「g」;) –

相關問題