我有一个MySQL表,其中两个字段应该是唯一的。当提供新数据时,我需要检查它是否已经存在,因此想做类似的事情(包括PDO参数):
SELECT COUNT(foo),COUNT(bar)
FROM `mytable`
WHERE foo=:foo
OR bar=:bar;
这里的问题是,如果两个值都返回相同的计数,那么在该计数为1的情况下,我不知道哪个列包含匹配值。显然我可以把它分成2个查询,但有没有更简洁的方法来同时检查两个?
答案 0 :(得分:1)
也许是这样的:
SELECT
SUM(CASE WHEN foo='foo' THEN 1 ELSE 0 END) AS FooCount,
SUM(CASE WHEN bar='bar' THEN 1 ELSE 0 END) AS BarCount
FROM
`mytable`
答案 1 :(得分:1)
不是真的,但你可以假装它:
SELECT COUNT(foo) FROM `mytable` WHERE foo=:foo
UNION
SELECT COUNT(bar) FROM `mytable` WHERE bar=:bar;
或
SELECT (SELECT COUNT(foo) FROM `mytable` WHERE foo=:foo) AS `foo`, (SELECT COUNT(bar) FROM `mytable` WHERE bar=:bar) AS `bar`;
或
SELECT SUM(IF(foo=:foo, 1, 0)) as foo, SUM(IF(bar=:bar, 1, 0)) as bar FROM `mytable`
在三者之间,你需要测试哪个表现最佳。