-1
我使用下面的代碼,在裏面找到獲取隨機行中如果全文結果小於N行
SELECT * FROM table
WHERE MATCH(title) AGAINST('php tutorial') LIMIT 25
如果有符合我查詢的標題,它返回25行。如果該行爲空或者如果少於25行,我想從表中隨機選擇25行。是否有可能在單個查詢?
我使用下面的代碼,在裏面找到獲取隨機行中如果全文結果小於N行
SELECT * FROM table
WHERE MATCH(title) AGAINST('php tutorial') LIMIT 25
如果有符合我查詢的標題,它返回25行。如果該行爲空或者如果少於25行,我想從表中隨機選擇25行。是否有可能在單個查詢?
相反,使用order by
和limit
:
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個記錄限制了整體排列中。就像您最初的查詢一樣,它並不能保證得分最高的冠軍將被退回。
你能解釋什麼是t?我得到錯誤未知表't'? – Vishnu
它是一個表別名。在第二個子查詢中,它應該拼寫爲「g」;) –