MySQL: проверьте, существуют ли данные внутри запроса - PullRequest
1 голос
/ 03 декабря 2010

Я никогда не использовал "if-else" или "case" внутри sql-запроса, но, думаю, мне нужно на этот раз.У меня есть таблица, данные которой представляют собой что-то вроде соревнования между двумя пользователями:

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

Пользователи могут голосовать за одну или другую контрагенту в рамках этого соревнования;голос представляется следующим образом:

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

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

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

Как мне сделать это именно в MySQL?

1 Ответ

3 голосов
/ 03 декабря 2010
   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...