2010-12-03 56 views
1

SQLクエリの中で "if-else"や "case"を使ったことはありませんでしたが、今回は必要です。 私は、データが二人のユーザ間の競争のようなものを表しているテーブルがあります。MySQL:クエリ内にデータが存在するかどうかを確認してください

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

したユーザー競争内の1つまたは他のcontrahentに投票することができます。投票はそうのように表される:

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

明らかに私のwebアプリケーション内のすべての与えられたユーザーは、任意の競争のために一回投票することができます。したがって、私が競技会を照会するとき、私は現在の(現在のセッションを所有している)ユーザーが既にこの競技会に投票した場合にも情報を得たいと思っています。だから、競争の他のすべてのプロパティに加えて、私は追加のものを持っているように、それは "投票"のようなキーと "はい"または "いいえ"のような値を持っています。

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

は、どのように私はその正確MySQLで行うのです: だから私のselect文は、私は推測する。このようになるはずですか?

+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

関連する問題