我有一个包含许多记录的MySQL表。我试图找到一种方法来显示满足查询的多个条件的记录。例如,如果我有这张表。
TABLE NAME: DATA
ID contactid flag flag_type
-----------------------------------
1 99 Volunteer 1
2 99 Uploaded 2
3 100 Via Import 3
4 100 Volunteer 1
5 100 Uploaded 2
条件如:
WHERE (ID > 2) OR (flag = 'Uploaded') OR (flag_type = 1) ..etc..
输出将是ID 4& 5只会被退回。
答案 0 :(得分:5)
您可以计算MySQL中的条件数并使用此值:
where ((id > 2) +
(flag = 'Uploaded') +
(flag_type = 1)
) > 1
布尔值“true”被视为1
,“false”被视为0
。因此,通过将值相加,您可以获得满足的条件数。
通常,您在order by
中执行此操作,以获得最匹配的第一个:
where id > 2 or flag = 'Uploaded' or flag_type = 1
order by ((id > 2) +
(flag = 'Uploaded') +
(flag_type = 1)
) desc;
答案 1 :(得分:2)
http://sqlfiddle.com/#!2/572e1/11
此解决方案选择每个成功条件为1,并将其添加到“因子”中。然后我们显示至少有两个因素的结果:
SELECT * FROM
(select id, contactid, flag, flag_type,
(CASE WHEN id > 2 then 1 else 0 END) +
(CASE WHEN flag = 'Uploaded' then 1 else 0 END) +
(CASE WHEN flag_type = 1 then 1 else 0 END) AS factors
from DATA
) t
WHERE factors > 1
答案 2 :(得分:1)
在您的有限问题中,这是可以提供的最多问题。
WHERE `ID`>2 AND (`flag`='Uploaded' OR `flag_type`=1) ..etc
答案 3 :(得分:0)
您走的是正确的道路,但您需要先阅读boolean logic。 OR将返回与任何条件匹配的记录,AND将返回与所有条件匹配的记录。