我有一个程序应该检查特定日期范围内的记录是否存在,如果存在则获取记录,否则获取最后 20 条记录。
为此,我必须多次编写查询,一次用于检查存在性,然后获取相同的记录或获取没有 where 子句但有限制的记录。
查询在程序内部是这样的
set @cnt = (select count(*) from table where date_field between date1 and date2) ;
if @cnt > 0 then
select * from table where date_field between date1 and date2 ;
else
select * from table order by date_field desc limit 0,20 ;
end if ;
Run Code Online (Sandbox Code Playgroud)
有什么办法可以在单个查询中完成,因为我的查询有太多连接并且太复杂,可能需要一些时间,所以如果我调用它两次,获取时间会增加。
您可以使用以下内容将其减少到 2 个查询:
select * from table where date_field between date1 and date2 ;
set @count = found_rows()
if @count = 0 then
select * from table order by date_field desc limit 0,20 ;
end if ;
Run Code Online (Sandbox Code Playgroud)