SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.01.2013 12:33:35

webhex
Участник
Зарегистрирован: 28.01.2013
Сообщений: 5

Выборка данных c ограничением записей в группе

Добрый день, занимаюсь разработкой рейтинга.

Таблица такого плана:

create table `polls`(date datetime NOT NULL,
                             login varchar(20) NOT NULL,
                             text text NOT NULL)
        ENGINE=InnoDB Default CHARSET=utf8;

когда пользователь нажимает голосовать, в таблицу добавляются его время когда он проголосовал - date, его логин - login и категорию за которую проголосовал - text, при этом запись данных для пользователя не ограниченна, он может голосовать за несколько категорий.

Задача.

Сделать выборку по каждой категории (text), подсчитывая голоса пользователей (count(login)), но выборка должна должна учитывать что пользователь не может поставить более 20 голосов за 1 категорию.

Ниже привожу запрос который я сформировал но он работает не корректно.

select text t,login l,p.sm from polls r LEFT JOIN
(select login vl, text vt, count(login) sm from polls limit 20) p on (p.vl=r.login and p.vt=r.text) group by r.text, r.login order by r.text, r.login;

Заранее, благодарю за помощь.

Отредактированно webhex (28.01.2013 12:34:45)

Неактивен

 

#2 28.01.2013 12:41:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка данных c ограничением записей в группе

Простым запросом вы эту задачу не решите. Проще при добавлении проверять, есть ли уже у данного пользователя 20 голосов за эту категорию.

Неактивен

 

#3 28.01.2013 12:55:01

webhex
Участник
Зарегистрирован: 28.01.2013
Сообщений: 5

Re: Выборка данных c ограничением записей в группе

Добрый день, спасибо за столь быстрый ответ. По поводу проверки к базе данных я имею права только считывания. Поэтому проверять не могу.

Может быть сделать stored prucedure которая вначале делает запрос:
select text, login, count(login) from polls group by text, login order by text, login;
а потом из результата данного запроса все поля которые имеют количество больше 20, большее значение в выходной таблице меняет на 20. Возможно такое?

Либо другой вариант, при выборке из таблицы значения которые при группировке count больше 20, не считывать далее эти данные с условием совпадения логина и текста (это примерно что я хотел отобразить в том запросе который написал выше).

Спасибо, за ответы.

Неактивен

 

#4 28.01.2013 13:04:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка данных c ограничением записей в группе

select `text` t, `login` l from `polls` group by 1,2 having count(*)<21; -- выберет только те категории и логины, где пользователь голосовал не более 20 раз

Неактивен

 

#5 28.01.2013 13:09:55

webhex
Участник
Зарегистрирован: 28.01.2013
Сообщений: 5

Re: Выборка данных c ограничением записей в группе

мне нужны те которые проголосовали более 20 раз, но в выходной таблице вместо значения большего 20 должно быть 20

Неактивен

 

#6 28.01.2013 13:14:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка данных c ограничением записей в группе

считаете голоса тех, кто проголосовал положенное число раз.
считаете кол-во тех, кто проголосовал больше положенного, умножаете на 20 и добавляете к первому результату.

Неактивен

 

#7 28.01.2013 13:19:39

webhex
Участник
Зарегистрирован: 28.01.2013
Сообщений: 5

Re: Выборка данных c ограничением записей в группе

я хочу чтоб это было в одном запросе или stored procerdure

Неактивен

 

#8 28.01.2013 13:24:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка данных c ограничением записей в группе

Так в stored procerdure можно делать несколько запросов.
Можно и одним, но это будет дикая конструкция с кучей вложенных подзапросов.

Неактивен

 

#9 28.01.2013 13:39:35

webhex
Участник
Зарегистрирован: 28.01.2013
Сообщений: 5

Re: Выборка данных c ограничением записей в группе

как сделать такую stored процедуру?

Неактивен

 

#10 28.01.2013 13:55:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка данных c ограничением записей в группе

Как и любую другую
http://dev.mysql.com/doc/refman/5.5/en/ … edure.html

Не понял в чем суть последнего вопроса?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson