Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Помогите составить запрос для расчёта ТОП 10


Автор: FlightOfDeath 18.3.2012, 11:26
Приветствую всех.
Имеется 1 таблица, где хранятся голоса пользователей, которые проголосовали. В таблице есть поле "vote", где может быть два значения "p" или "m", то есть плюс или минус.

Вот сама таблица:

|  id  |  loop_id  |  user_id  |  ip  |  vote  |
--------------------------------------------------
|   1  |      1       |       1       |  *   |    p     |
|   2  |      1       |       2       |  *   |    m    |
|   3  |      1       |       5       |  *   |    p     |
|   4  |      3       |       1       |  *   |    p     |
|   5  |      6       |       1       |  *   |    m    |
|   *  |      *       |       *       |  *   |    *     |

В общем нужно вывести десять полей "loop_id", у которых в сумме со значением полей vote больше, то есть если, допустим, 10 плюсов и 2 минуса в поле "vote" у одного "loop_id", а у другого 5 плюсов и 1 минус, то на первом месте должен быть первый, так как в сумме у него получается 8, а у второго 4.
Возможно ли сделать это всё одним запросом или всё же из-за неправильного составления таблицы придётся вычислять уже другими средствами и делать несколько запросов?

Автор: Akina 18.3.2012, 11:42
Код

select loop_id, sum(vote='p')-sum(vote='m') rating
from `table`
group by loop_id
order by 2 desc
limit 10


Цитата(FlightOfDeath @  18.3.2012,  12:26 Найти цитируемый пост)
два значения "p" или "m", то есть плюс или минус

Какой кретин это придумал? Что мешало заносить туда совершенно очевидные 1 и -1?

Автор: FlightOfDeath 18.3.2012, 12:05
Akina, Спасибо большое! smile
Признаюсь, этот кретин я. Просто была спешка и как то не подумал даже про простые числа...

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