2010-12-03 4 views
1

SQL 쿼리에서 "if-else"또는 "case"를 사용한 적이 없지만 이번에는 필요합니다. 나는 데이터가 두 개의 사용자 간의 경쟁 같은 것을 나타내는 테이블이 있습니다MySQL : 쿼리 내부에 데이터가 있는지 확인하십시오.

//properties of "competition-table 
    int competitionId 
    int userId_Contrahent1 
    int userId_Contrahent2 
    otherdata.... 

사용자 그 경쟁에서 하나 또는 다른 contrahent 투표 할 수 있습니다; 투표는 다음과 같이 표현됩니다 :

//properties of vote-table 
    int voteId 
    int competitionId 
    int userId_Voter 
    int userId_Winner // the user for which this vote counts 
    otherdata.... 

분명히 내 웹 응용 프로그램의 모든 주어진 사용자는 주어진 경쟁에 대해 한 번만 투표 할 수 있습니다. 따라서 경쟁에 대한 질문을 할 때 현재 사용자 (현재 세션을 소유하고있는 사용자)가 이미이 경쟁에 투표 한 경우 정보를 갖고 싶습니다. 그래서 경쟁의 다른 모든 속성들에 덧붙여, 나는 "투표"와 같은 키와 "예"또는 "아니오"와 같은 값을 가진 추가 태그를 갖고 싶어합니다.

SELECT competition.*, 
If EXISTS ( 
    SELECT * FROM vote WHERE userId_Voter = $currentUserId 
    AND competitionId = competition.competitionId) 
    ...do something 
FROM competition; 

가 어떻게이 정확히 MySQL은합니까 : 그래서 내 선택 문은 내 생각의 모양은?

+0

새 열을 만들려면 ALTER TABLE tablename ADD cloumnname tinyint(); – Breezer

+0

@ 브리저 : 내 webapp에있는 모든 기존 사용자를 경쟁 테이블에 추가 할 수 없습니다! –

답변

3
SELECT c.*, 
      IF(v.competitionId IS NOT NULL, 'voted', 'not voted') AS `verdict` 
    FROM competition c 
LEFT JOIN vote v ON v.competitionId = c.competitionId 
       AND v.userId_Voter = $currentUserId 
+0

값이 "투표 됨"또는 "투표되지 않음"인 경우 속성의 키는 무엇입니까? –

+0

@paskster : 업데이트 된 쿼리 조금 – zerkms

관련 문제