Сегментная группировка на MySQL

программирование php MySQL базы данных sql

Уважаемые гуру, дайте идею как реализовать частичную группировку строк в MySQL ?

Имеется в виду вот что:

1 10
2 10
3 10
4 56
5 10
6 10
7 80
8 12

А нужно получить вот так:
1 10 3
4 56 1
5 10 2
7 80 1
8 12 1

Т.е. повторяющиеся данные сгруппированы и добавлен столбец с их количеством.

Как такое сделать ?

Примечание:
2 dimasokol
Тогда он все десятки склеит в одно, а они разделены числом 56 и поэтому должны быть сгруппированы в две разные группы.

Примечание:
>>> ## А, понял мысль. ИМХО тут неправильным проектированием БД пахнет, потому что малой кровью задачу как-то не решишь.

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

Примечание:
Ловите решение. Помогли ребята с stackoverflow'а.

select
min( PreQuery.ID ) as StartIDOfGroup,
PreQuery.n,
count(*) as Cnt
from
( select yt.id,
yt.n,
@CommonGroup := @CommonGroup + if( @LastNValue = yt.n, 0, 1 ) as Common,
@LastNValue := yt.n as JustAPlaceholder
from
YourTable yt,
( select @CommonGroup := 0, @LastNValue := 0 ) SQLVars ) PreQuery
group by
PreQuery.n,
PreQuery.Common
order by
StartIDOfGroup

Примечание:
>>> А почему вы не захотели сделать то же самое средствами PHP?

Мне нужна линейная таблица, потому что планируется выводить этот лог в человекоудобном виде с пагинацией. Если делать на PHP, то чтобы вывести, например, 135ю страницу, мне придётся просчитывать все предыдущие 134 штуки. Нельзя PHP загружать такой ацкой работой))

Примечание:
Да, кэш у меня стоит на уровне HTML-блоков, думаю, надо сделать ещё и на уровне этой таблицы. Т.е. пересоздавать кэш по событию смены содержимого лога.
Спасибо.
Ответы:
SELECT id, something, COUNT(something) FROM some_table GROUP BY something
Попробовал. Вроде работает
А если попробовать с with rollup? В мануале есть похожий пример как раз.
Дополнение #3
Дополнение #4


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.