Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2015, 16:12   #1
conflictogen
Пользователь
 
Регистрация: 12.05.2015
Сообщений: 15
Вопрос Одновременная сортировка по 2 полям

Здравствуйте!

Подскажите, как решить такую задачу.

Есть БД, в ней таблица "рейтинг" со структурой - "subject_id", "marks", "total", где:

"subject_id " - ID продукта,
"marks" - сумма всех оценок данного продукта,
"total" - количество всех оценок.

Оценка рассчитывается так: marks / total.

Необходимо составить условие сортировки для выбора "топ"-продуктов, тоесть чтобы значение "marks" было наибольшим, при этом чтобы "total" было наименьшим.

Пробовал так сортировать:
PHP код:
SELECT FROM  `рейтингORDER BY `marksDESC ,  `totalASC 
- не подходит, потому что приоритетней в сортировке будет поле marks.

Если добавить LIMIT 1, теперь допустим есть запись "продукт1" с полями "marks" = 10, и "total" = 5 (условное поле "оценка" будет = 2) , то этот продукт будет выбран вместо другого более подходящего, например "продукт2" с полями "marks" = 5, "total" = 1 ( условное поле "оценка" = 5).

Каким образом можно сделать такую сортировку?
conflictogen вне форума Ответить с цитированием
Старый 18.08.2015, 16:49   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

как информация к размышлению
http://www.programmersforum.ru/showt...59#post1280659
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 18.08.2015, 19:15   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от conflictogen Посмотреть сообщение
Оценка рассчитывается так: marks / total.
Гораздо эффективнее сразу добавить в таблицу Рейтингов новое поле `rating`, в котором фиксировать непосредственно готовое значение оценки, вычисляемое по указанному принципу – пересчитывая это значение при каждом изменении Рейтинга продукта.
Иначе, при больших объёмах данных, запросы с прямым вычислением оценок для построения ТОП-ов, статистики и сортировок будут существенно тормозить.
Andkorol вне форума Ответить с цитированием
Старый 19.08.2015, 11:17   #4
failure1
 
Регистрация: 03.01.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Гораздо эффективнее сразу добавить в таблицу Рейтингов новое поле `rating`, в котором фиксировать непосредственно готовое значение оценки, вычисляемое по указанному принципу – пересчитывая это значение при каждом изменении Рейтинга продукта.
Иначе, при больших объёмах данных, запросы с прямым вычислением оценок для построения ТОП-ов, статистики и сортировок будут существенно тормозить.
Может быть было бы эффективней. Вот решение очень простое :
PHP код:
SELECT FROM  `рейтингORDER BY marks total 
Вы думаете, что именно такого вида запрос будет тормозить при больших обьемах данных?

Последний раз редактировалось failure1; 19.08.2015 в 11:37.
failure1 вне форума Ответить с цитированием
Старый 19.08.2015, 12:25   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

ну явно медленнее работать чем просто по одному полю.. вообще рекомендуется не делать ORDER BY по вычисляемым полям
ADSoft вне форума Ответить с цитированием
Старый 19.08.2015, 20:22   #6
conflictogen
Пользователь
 
Регистрация: 12.05.2015
Сообщений: 15
По умолчанию

Решил задачу путём добавления нового поля. Спасибо!
conflictogen вне форума Ответить с цитированием
Старый 19.08.2015, 22:24   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от failure1 Посмотреть сообщение
Вот решение очень простое :
PHP код:
SELECT FROM  `рейтингORDER BY marks total 
Для потомков – за такие «простые» решения нужно банить, и руки ломать в 3-х местах
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по не текстовым полям Armageddets БД в Delphi 1 10.05.2015 12:11
сортировка по вычислительным полям bratcho БД в Delphi 1 12.02.2014 14:00
Сортировка по созданным полям grominfo PHP 6 16.08.2013 19:26
Сортировка по полям связи A_r_r_a_y БД в Delphi 8 25.04.2009 21:11
Сортировка по вычисляемым полям unit-85 SQL, базы данных 2 02.04.2009 12:05