MYsql Query Устранение неполадок - PullRequest
0 голосов
/ 13 июля 2011
SELECT contest.contest_id 
FROM db_user
LEFT JOIN participants ON participants.user_id = db_user.db_user
LEFT JOIN contest ON participants.contest_id = contest.contest_id
WHERE contest.user_id=$user
group by participants.contest_id,participants.user_id";

Это возвращает всех пользователей, которые участвуют во всех соревнованиях и работает хорошо, но мне нужно найти количество строк, которые оно возвращает. Например, выше возвращает 5 строк я хочу, чтобы результат был как

Contest_Id       Number of users
1                       3
2                       4

Ответы [ 5 ]

0 голосов
/ 13 июля 2011

Ваш запрос синтаксически неверен, так как вы всегда должны выбирать поля, упомянутые в предложении GROUP BY, хотя MySQL позволяет указывать другие поля, вы должны знать, что большую часть времени вы будете получать непредсказуемые результаты.При этом, возможно, это запрос, который вы ищете:

SELECT participants.contest_id, COUNT(DISTINCT participants.user_id) AS 'Number of users'
FROM db_user
  LEFT JOIN participants ON participants.user_id = db_user.db_user
  LEFT JOIN contest ON participants.contest_id = contest.contest_id
WHERE contest.user_id = $user
GROUP BY participants.contest_id;
0 голосов
/ 13 июля 2011

Возможно, вы захотите расширить свой оператор SELECT, включив в него COUNT(participants.user_id).Впрочем, если бы он дважды участвовал в одном и том же конкурсе, то пользователь получит двойной счет.

0 голосов
/ 13 июля 2011

Попробуйте это:

 select contest.contest_id ,Count(*) as 'No of Users'
    FROM db_user
    LEFT JOIN participants ON participants.user_id = db_user.db_user
    LEFT JOIN contest ON participants.contest_id = contest.contest_id
    WHERE contest.user_id=$user
    group by participants.contest_id;
0 голосов
/ 13 июля 2011

Попробуйте:

    SELECT contest.contest_id, 
(select count(*) from db_user 
      inner JOIN participants ON participants.user_id = db_user.user_id and                   
      participants.contest_id = contest.contest_id)
    FROM contest
0 голосов
/ 13 июля 2011

Вам необходимо использовать агрегатную функцию COUNT вместе с соответствующим предложением HAVING. Смотрите следующее: HAVING Clause

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...