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

时间:2015-06-16 13:24:52

标签: mysql sql mysqli full-text-search

我使用下面的代码来查找内容

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

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

1 个答案:

答案 0 :(得分: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条记录。与原始查询一样,它不保证将返回得分最高的标题。