Здравствуйте!
Есть таблица с постами пользователя. Пользователь определяется по ключу user_id.
Как правильней реализовать выборку последних записей со всей таблици постов так, чтоб максимальное количество постов одного пользователя не превышало N?
Выборка
- sluchainiyznak
- Сообщения: 617
- Зарегистрирован: 2013.05.19, 17:51
- Откуда: ХМАО-Югра, г. Сургут
- Контактная информация:
Re: Выборка
Немного опишу ситуацию по другому.sluchainiyznak писал(а):http://www.yiiframework.com/doc/api/1.1 ... mit-detail
Есть 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).
Как грамотней такое реализовать?
Re: Выборка
Возможно, не до конца понял, что вы хотите, но в первую очередь необходима группировка записей по блокам "следующих подряд записей одного пользователя".
Если добавляются одновременно - группируйте по дате создания, ну или какое-нить поле добавляйте, чтобы группировать потом по нему удобно было (возможно логика вашего приложения имеет такое хитрое поле).
Во-вторых, надо наложить на каждую группу лимит. Средствами mysql по-нормальному не получится, но есть много полудеревянных хитростей:
http://stackoverflow.com/questions/2129 ... -per-group
Одни, например, предлагают разбить запрос на несколько мелких простых (с LIMIT'ом) и объединить их UNION, другие предлагают GROUP_CONCAT() сделать из группы, ну и так далее, погуглите приведенными ключевыми фразами.
Если добавляются одновременно - группируйте по дате создания, ну или какое-нить поле добавляйте, чтобы группировать потом по нему удобно было (возможно логика вашего приложения имеет такое хитрое поле).
Во-вторых, надо наложить на каждую группу лимит. Средствами mysql по-нормальному не получится, но есть много полудеревянных хитростей:
http://stackoverflow.com/questions/2129 ... -per-group
Одни, например, предлагают разбить запрос на несколько мелких простых (с LIMIT'ом) и объединить их UNION, другие предлагают GROUP_CONCAT() сделать из группы, ну и так далее, погуглите приведенными ключевыми фразами.
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.