繁体   English   中英

当限制小于时mysql添加条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM