2012-04-12 9 views
0

私は2つのフィールドが一意であると思われるMySQLテーブルを持っています。新しいデータがアップ提供されているように私は(PDOパラメータが含まれている)がすでに存在するかどうかを確認する必要があり、そのような何かをしたいと思います:1つのクエリで2つの列の一意の値を確認する方法はありますか?

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

ここでの問題は、両方の値が戻って同じカウントで来る場合ということですそのカウントが1の場合、どの列に一致する値が含まれているのかわかりません。明らかにこれを2つのクエリに分割することはできますが、同時に両方をチェックするためのより良い方法はありますか?たぶん

+1

あなたが探しているのはXORだと思いますか?私はあなたの質問をよく理解していませんでした。 "...両方の値が同じカウントで戻ってくるのであれば?" –

答えて

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` 
+0

'where'節を忘れていませんか? –

+0

これは私のテストデータセットにスポットがあるようです、ありがとう! – shanethehat

+0

@Clodoaldoいいえ、CASEのために動作します – Umbrella

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` 

3つの間で、どちらが最も優れているかをテストすることができます。

関連する問題