如果全文结果少于N行,则获取随机行

问题描述 投票:-1回答:1

我正在使用下面的代码找到某些东西

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

如果有与我的查询匹配的标题,它将返回25行。如果该行为空或少于25行,我想从表中随机获得25行。 单个查询可以吗?

mysql sql full-text-search
1个回答
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条记录。像您的原始查询一样,它不能保证将获得得分最高的标题。
© www.soinside.com 2019 - 2024. All rights reserved.