Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Рейтинг новости


Автор: DioNiR 9.7.2007, 16:55
Может вопрос и обсуждался но не нашёл подходящего.

Тута уже не первый раз вижу как в Системах делают Рейтинг новостей.

Пользователь может добавлять свой рейтинг к каждой новости.

Как проголосовать и как это занести в БД я умею.

Проблема в другом как это правильно вывести.

В таблице у меня есть 5 столбов:
rating
rating2
rating3
rating4
rating5
rating_votes - сколько всего проголосовало.

Собственно 5 вариантов для голосования.
Вот мне надо вывести не всё голосование всех вариантов. А только 1 которого больше.

Автор: Leoo 9.7.2007, 17:06
Нууу, вообще этот вопрос скорее к БД чем к РНР, а так можно сделать 5 запросов (по запросу на каждый рейтинг) и потом сравнить которого больше.

Автор: DioNiR 9.7.2007, 17:17
Ага и зачем же делать эти 5 запросов когда я их и так могу вывести при выводе новости в цикле.

Мне собственно нужно показать принцип сравнения этих данных.

Автор: GZep 9.7.2007, 17:20
зечем же тогда так много столбцов!

можно одно поле, где будет храниться число с плавающей точкой (например 3.2)
потом просто округлять его при выводе. Используется всего одна колонка + можно сделать колонку для подсчета проголосовавших.

НО: перед занесением результата надо сделать выборку и посчитать новый средний голос.

Автор: UADeveloper 9.7.2007, 17:35
Цитата(GZep @  9.7.2007,  17:20 Найти цитируемый пост)
 можно сделать колонку для подсчета проголосовавших.

Вот интересует математическая часть.

Вот скажем в таблице уже эсть рейтинг (например 4.0 и 10 проголосовавших) если придет еще один юзер и выберет 3, как  просчитать новый рейтинг? smile

Автор: DioNiR 9.7.2007, 17:48
Разве это много столбов?

Я стараюсь привести запросы в БД к минимуму.

А такое кол-во столбов позволяет точно определить за что и кто проголосовал.
Позволяет точно определить за что голосовали больше.

Вот только мне надо узнать как можно определить за что больше проголосовало из этих 5.

Автор: GZep 9.7.2007, 17:48
Ок. Вот таблица:
Цитата

проголосовало        средний балл
10                             4.0

вот получили новый голос.

достаем записи... (SELECT "проголосовало" AND "средний балл" WHERE ...)

математика:
проголосовало (умножить) средний балл
к результату прибавить 3 (или другой голос)
разделить полученное на (проголосовало + 1 , то есть 11)
обновить таблицу:
проголосовало теперь 11, средний балл - часное от деления.

Добавлено через 23 секунды
все равно 2 запроса - как ни крути

Добавлено через 1 минуту и 42 секунды
Цитата(DioNiR @  9.7.2007,  17:48 Найти цитируемый пост)
Вот только мне надо узнать как можно определить за что больше проголосовало из этих 5

мой метод не дает такой возможности - он дает только средний балл... если это не подходит - наверное все-таки 5 столбцов...

Автор: DioNiR 9.7.2007, 18:04
хм... когда так разжувал я понял про что ты и как это работает.

Попробую задействовать твой вариант.

Автор: UADeveloper 9.7.2007, 18:43
GZep, пасиб за идею ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)