当限制小于时,mysql添加条件

时间:2017-02-27 16:53:27

标签: mysql

我为我的网站创建了相关系统。 当结果行少于i setup - 添加了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个查询中的内容如何?如果可能的话

2 个答案:

答案 0 :(得分:3)

重新运行已更改的查询,如果结果集很小,则不是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行。如果前3个查询中没有一个提供结果,则返回数据库中存在的前4个动物。

答案 1 :(得分:0)

我在我的应用程序代码中执行此操作。

但是为了看看它是否有效,你可以试试这个:

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