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