2012-04-12 3 views
0

두 개의 필드가 고유해야하는 MySQL 테이블이 있습니다. 새로운 데이터가 제공되기 때문에 나는 (PDO 매개 변수 포함)가 이미 존재하는지 확인해야합니다, 그래서 같이 일을하고 싶습니다 :하나의 쿼리로 두 열의 고유 값을 확인하는 방법은 무엇입니까?

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 아니요, 사례로 인해 작동합니다. – 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` 

세 가지 중에서 가장 우수한 결과를 테스트 해보고 싶을 것입니다.

관련 문제