Автор |
Сообщение |
Richard Ferlow Гуру Предупреждений : 2
|
|
Нужно вот мне рейтинг фотографий создать, только вот не знаю до конца как это сделать.
Что ясно - как голосуют - в таблице поля - id|photo|user|vote|date
Тут ясно - как голоса собирать.
Не ясно как потом их считать и выбирать. Знаю что какой-то хитрый запрос нужно создать.
В итоге нужно получить 5ть фоток с самым высоким значением рейтинга, и вывести их в порядке убывания. |
|
|
|
|
Nick123 Эксперт |
|
На MySQL примерно так:
SELECT * from 'your_table_name' ORDER BY 'rate' DESC LIMIT 0,5
Помещаешь это в переменную PHP, а дальше обрабатываешь ее стандартными средствами.
P.S. Только апострофы там другие будут. |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
Nick123
Нет, не так, так он выберет 5ть случайных записей с наиболее высокими оценками
А для каждого изображения много же голосов. |
|
|
|
|
def Гость |
|
Richard Ferlow, яснее задачу описывай.
То есть в первом посте ты описал таблицу, в которой хранятся данные по голосованию? |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
def
Да - тоесть человечек нажал одну из 5ти звездочек - в базу заносится
id|photo|user|vote|date
() 45 32 2 11111111
Тоесть для фото с id 45 проголосовал юзер с id 32 поставив оценку 2 ну и метка времени. |
|
|
|
|
Panter Продвинутый форумчанин |
|
Richard Ferlow
Если тебе надо усреднённый рейтинг для каждой фотки и выбрать 5 наивысших значений, то, ИМХО, должно быть что-то типа такого запроса:
Код: |
select *
from(select photo,sum(rate)/count(rate) as rate
from 'your_table_name'
gropup by photo) t
order by rate desc limit 0,5 |
|
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
Panter
Интересное предложение, надо попробовать.
Пока ходил, второй вариант реализации придумал, где данные о рейтинге для отдельной фото хранились бы в отдельной строке в базе данных, а не использовались бы строки для каждого голоса, однако этот способ сложнее в плане учета проголосовавших. |
|
|
|
|
|