Выборка

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
jdiond
Сообщения: 30
Зарегистрирован: 2013.11.02, 23:50

Выборка

Сообщение jdiond »

Здравствуйте!
Есть таблица с постами пользователя. Пользователь определяется по ключу user_id.
Как правильней реализовать выборку последних записей со всей таблици постов так, чтоб максимальное количество постов одного пользователя не превышало N? :?
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Выборка

Сообщение sluchainiyznak »

jdiond
Сообщения: 30
Зарегистрирован: 2013.11.02, 23:50

Re: Выборка

Сообщение jdiond »

Немного опишу ситуацию по другому.

Есть 2 таблицы: users, posts. Связь реализована через user_id таблицы posts.
Вася добавил 2 записи. Петя после него добавил 3 записи. Вася опять добавил 100 записей.

Делаем выборку свежих записей posts по дате и получаем записи в таком порядке:
100 записей Васи, 3 записи Пети, 2 записи Васи

Вот только 100 записей этого пользователя нужно ограничить N числом (например 15).

Должно получиться:
15 (вместо 100) записей Васи, 3 записи Пети, 2 записи Васи

То есть, если последние подряд записи одного пользователя превышают количество N (15), то должно выводиться только N (15) записей и они так же должны быть последними из этого превышающегося числа (100).

Как грамотней такое реализовать?
IStranger
Сообщения: 36
Зарегистрирован: 2011.11.04, 10:46
Контактная информация:

Re: Выборка

Сообщение IStranger »

Возможно, не до конца понял, что вы хотите, но в первую очередь необходима группировка записей по блокам "следующих подряд записей одного пользователя".
Если добавляются одновременно - группируйте по дате создания, ну или какое-нить поле добавляйте, чтобы группировать потом по нему удобно было (возможно логика вашего приложения имеет такое хитрое поле).
Во-вторых, надо наложить на каждую группу лимит. Средствами mysql по-нормальному не получится, но есть много полудеревянных хитростей:
http://stackoverflow.com/questions/2129 ... -per-group

Одни, например, предлагают разбить запрос на несколько мелких простых (с LIMIT'ом) и объединить их UNION, другие предлагают GROUP_CONCAT() сделать из группы, ну и так далее, погуглите приведенными ключевыми фразами.
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
Ответить