我使用下面的代码来查找内容
SELECT * FROM table
WHERE MATCH(title) AGAINST('php tutorial') LIMIT 25
如果有与我的查询匹配的标题,则返回25行。如果行为空或少于25行,我想从表中随机获取25行。可以在单个查询吗?
答案 0 :(得分:0)
相反,请使用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条记录。与原始查询一样,它不保证将返回得分最高的标题。