2010-12-03 4 views
1

Я никогда не использовал «if-else» или «case» внутри sql-запроса, но, похоже, мне нужно это время. У меня есть таблица, данные которой представляет собой нечто вроде соревнования между двумя пользователями: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.... 

Очевидно каждый данный пользователь в моем WebApplication можно только один раз для любого данного конкурса. Поэтому, когда я запрашиваю конкурс, я также хочу получить информацию, если текущий участник (который владеет текущим сеансом) уже голосовал за этот конкурс. Поэтому в дополнение ко всем другим свойствам конкурса мне нравится иметь дополнительный, который имеет такой ключ, как «проголосовали» и значение «да» или «нет». Так что мой выбор заявление должно выглядеть примерно так я думаю:

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 2010-12-03 03:58:07

+0

@Breezer: Я не могу добавить для каждого существующего пользователя в моем webapp еще один столбец на стол для соревнований !!!! – 2010-12-03 04:12:21

ответ

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 
Смежные вопросы