Это более подробный вопрос, так как моя предыдущая попытка была недостаточно ясной. Я новичок в MySQL и понятия не имею, как лучше всего делать определенные вещи. Я создаю приложение для голосования для изображений, и у меня возникают проблемы с некоторыми тонкостями MySQL
My db
_votes
_images
- ID
- 1020 * имя_файл *
- entrant_id
- 1024 * одобрено *
_users
В основном мне нужно сделать следующее:
- подсчитать все утвержденные голоса
- вернуть 5 лучших с наибольшим количеством голосов
- проверить, проголосовал ли пользователь по каждому из этих 5 (верните логическое) из другой таблицы
Я пробовал варианты
SELECT i.id, i.file_name, i.total_votes
FROM _images i WHERE i.approved = 1
CASE WHEN (SELECT count(*) from _votes v WHERE v.image_id = i.id AND v.voter_id = ?) > 0 THEN '1' ELSE '0' END 'hasvoted'
ORDER BY i.total_votes DESC LIMIT ".($page*5).", 5
это то, что я должен попробовать и сделать все в одном запросе?
Этот запрос работал нормально, прежде чем я попытался добавить логическое значение hasvoted:
SELECT id, file_name, total_votes FROM _images WHERE approved = 1 ORDER BY total_votes DESC LIMIT ".($page*5).", 5
В данный момент я также храню подсчет голосов в таблице _images и знаю, что это неправильно, но я не знаю, как подсчитать голоса по image_id и затем упорядочить их.