Немного информации о предыстории; это приложение, которое позволяет пользователям создавать проблемы, а затем голосует по этим вызовам (стандартное приложение типа userX-vs-userY).Внесение вложенных запросов MySQL
Конечная цель состоит в том, чтобы получить список из 5 пользователей, отсортированных по количеству проблем, которые они выиграли, чтобы создать тип таблицы лидеров. Задача выигрывает пользователь, если он имеет статус = истек, и у пользователя есть 50 голосов за этот вызов (задачи истекают после 100 голосов в общей сложности).
Я немного упрощает здесь, но, по существу есть три таблицы:
пользователи
- идентификатор
- имя пользователя
- ...
Задачи
- ID
- issued_to
- issued_by
- статус
challenges_votes
- ид
- challenge_id
- user_id
- voted_for
До сих пор у меня есть внутренний запрос, который выглядит следующим образом:
SELECT `challenges`.`id`
FROM `challenges_votes`
LEFT JOIN `challenges` ON (`challenges`.`id` = `challenges_votes`.`challenge_id`)
WHERE `voted_for` = 1
WHERE `challenges`.`status` = 'expired'
GROUP BY `challenges`.`id`
HAVING COUNT(`challenges_votes`.`id`) > 50
Что в этом примере будет возвращать идентификаторы вызов с истекшим сроком годности и когда пользователь с ID 1 имеет> 50 голосов.
Что мне нужно сделать, это подсчитать количество строк, возвращаемых здесь, применить его к каждому пользователю из таблицы пользователей, заказывал по количеству возвращаемых строк и ограничить его до 5.
С этой целью я имеют следующий запрос:
SELECT `users`.`id`, `users`.`username`, COUNT(*) AS challenges_won
FROM (
SELECT `challenges`.`id`
FROM `challenges_votes`
LEFT JOIN `challenges` ON (`challenges`.`id` = `challenges_votes`.`challenge_id`)
WHERE `voted_for` = 1
GROUP BY `challenges`.`id`
HAVING COUNT(`challenges_votes`.`id`) > 0
) AS challenges_won, `users`
GROUP BY `users`.`id`
ORDER BY challenges_won
LIMIT 5
который является своим родом получает там, но, конечно, voted_for
идентификатор пользователя здесь всегда 1. является ли это даже правильный путь идти об этом типе запроса? Может ли кто-нибудь пролить свет на то, как я должен это делать?
Спасибо!
Привет, не могли бы вы предоставить более подробную информацию о вашей структуре таблицы? Я думал, что 'challenge_votes' будет иметь user_id, но я не могу найти его в вашем запросе. –
Столбец voted_for в 'challenge_votes' - это идентификатор пользователя, для которого предназначен голос, тогда как user_id - это идентификатор пользователя, который сам поместил голосование (что не актуально в этом запросе). – paulbennett