0

我有一个 MySQL 表,其中两个字段应该是唯一的。随着新数据的提供,我需要检查它是否已经存在,因此想做类似的事情(包括 PDO 参数):

SELECT COUNT(foo),COUNT(bar) 
FROM `mytable` 
WHERE foo=:foo 
OR bar=:bar;

这里的问题是,如果两个值都返回相同的计数,那么如果该计数为 1,我不知道哪一列包含匹配值。显然我可以将其拆分为 2 个查询,但是有没有一种更简洁的方法可以同时检查这两个查询?

4

2 回答 2

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`
于 2012-04-12T14:43:57.023 回答
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`

在这三者之间,您需要进行测试,看看哪个表现最好。

于 2012-04-12T14:45:57.243 回答