我正在使用下面的代码找到某些东西
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条记录。像您的原始查询一样,它不能保证将获得得分最高的标题。