За последние 24 часа нас посетили 22893 программиста и 1266 роботов. Сейчас ищут 683 программиста ...

Помогите составить запрос mysql с выборкой

Тема в разделе "MySQL", создана пользователем MrFallen, 17 авг 2017.

Метки:
  1. MrFallen

    MrFallen Новичок

    С нами с:
    5 апр 2017
    Сообщения:
    18
    Симпатии:
    0
    Добрый вечер. Есть 2 таблицы. contests: id, post_id, status и members: id, uid, post_id, won.
    2017-08-18_012215.jpg
    2017-08-18_012200.jpg
    Помогите правильно составить запрос, чтобы получить такой ответ (в поле members должно быть указано 3 uid, то есть те, которые имею статус won = 1):
    [​IMG]

    Сейчас я имею такой ответ (в поле members указаны все uid, а должны быть только те, которые имеют статус won = 1):
    [​IMG]

    Мой неправильный запрос:
    Код (Text):
    1. SELECT contests.id, contests.post_id, contests.status, GROUP_CONCAT(DISTINCT members.uid ORDERBY members.uid ASC SEPARATOR ', ')AS members
    2. FROM`contests` contests
    3. LEFTJOIN`members` members ON contests.post_id=members.post_id
    4. GROUPBY contests.post_id;
    Я пытаюсь сделать выборку по won = 1 и status = 1:
    Код (Text):
    1. SELECT contests.id, contests.post_id, contests.status, GROUP_CONCAT(DISTINCT members.uid ORDERBY members.uid ASC SEPARATOR ', ')AS members
    2. FROM`contests` contests
    3. WHERE members.won =1AND contests.status =1
    4. LEFTJOIN`members` members ON contests.post_id=members.post_id
    5. GROUPBY contests.post_id;

    Но получается ошибка:

    Код (Text):
    1. Unexpected ordering of clauses.(near "WHERE" at position 168)
    Дамп базы приложил.
    Помогите правильно составить запрос. Спасибо.
    --- Добавлено ---
    В общем. Я не внимательный. Нужно 3 и 4 строку поменять местами. WHERE пишется после всех JOIN.
     

    Вложения:

    #1 MrFallen, 17 авг 2017
    Последнее редактирование: 17 авг 2017
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Проблема в том, что с использованием GROUP BY и "подставных" имен (... as ...) Вам необходимо пользоваться HAVING, а не WHERE