[英]mysql add condition when limit less than
我为我的网站创建相对系统。 当结果行少于我设置时,我需要查询-添加了1个条件。
我的例子:
SELECT * FROM `animal` WHERE (`color_id`=1) LIMIT 4
当结果行少于4时,我添加条件
SELECT * FROM `animal` WHERE (`color_id`=1) OR (`breed_id`=1) LIMIT 4
并继续
SELECT * FROM `animal` WHERE (`color_id`=1) OR (`breed_id`=1) OR (`type_id`=1) LIMIT 4
如何在1个查询中查询? 如果可能的话
在结果集很小的情况下重新运行更改的查询不是MYSQL的工作,而是执行查询的代码。
真正的“肮脏”方法是使用Union
来确保结果集始终足够大,最后将其限制为4行(假设该表至少包含4个条目):
SELECT * FROM (
SELECT * FROM `animal` WHERE (`color_id`=1) LIMIT 4
UNION
SELECT * FROM `animal` WHERE (`color_id`=1) OR (`breed_id`=1) LIMIT 4
UNION
SELECT * FROM `animal` WHERE (`color_id`=1) OR (`breed_id`=1) OR (`type_id`=1) LIMIT 4
UNION
SELECT * FROM `animal` LIMIT 0,4
) as temp LIMIT 0,4
从技术上讲,这将为每个查询获取4行,并且仅将其添加到结果集中(如果该行尚未包含该行)。 从最终结果(最坏情况下为16行)开始,获取前4行。 如果前三个查询均未提供结果,则返回数据库中存在的前四个动物。
我会在我的应用程序代码中执行此操作。
但是,仅查看它是否有效,您可以尝试以下操作:
select *
from `animal`
where `color_id` = 1
or (
`breed_id` = 1
and (
select count(*)
from `animal`
where `color_id` = 1
) < 4
)
or (
`type_id` = 1
and (
select count(*)
from `animal`
where `color_id` = 1
or `breed_id` = 1
) < 4
) LIMIT 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.