2010-12-03 57 views
1

Je n'ai jamais utilisé "if-else" ou "case" dans une requête sql, mais je suppose que j'ai besoin de cette fois. J'ai une table dont les données représente quelque chose comme une compétition entre deux utilisateurs:MySQL: vérifier si les données existent dans la requête

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

Les utilisateurs peuvent voter pour l'un ou l'autre contrahent dans cette compétition; un vote est représenté comme ceci:

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

Il est évident que chaque utilisateur donné dans mon WebApplication ne peut voter qu'une seule fois pour une compétition donnée. Donc, quand je demande pour la compétition, je veux aussi avoir l'information si l'utilisateur actuel (qui possède la session en cours) a déjà voté pour ce concours. Donc en plus de toutes les autres propriétés de la concurrence, j'aime en avoir une de plus, qui a une clé comme "voté" et une valeur comme "oui" ou "non". Donc, mon instruction select devrait ressembler à quelque chose comme cela, je suppose:

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

Comment puis-je faire exactement dans MySQL?

+0

pour créer une nouvelle colonne ALTER TABLE nom_table ADD nom_cloud tinyint(); – Breezer

+0

@Breezer: Je ne peux pas ajouter pour chaque utilisateur existant dans mon webapp une autre colonne à la table de compétition !!!! –

Répondre

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

si la valeur est "voté" ou "non voté" quelle est la clé de la propriété? –

+0

@paskster: requête mise à jour un peu – zerkms