Задача вывести данные из таблицы, сгруппировать их по дате в выводе, при этом нужна постраничная навигация.
Т.е. в результате должно получиться
----Дата1------
- запись
- запись
- запись
----Дата2------
- запись
- запись
- запись
- запись
- запись
- запись
----Дата3------
- запись
Найдено страниц 1 2 3 4
----
Сделать логику группировки на шаблоне крайне легко, но группировку данных нельзя дробить по страницам

Пойдут абсолютно любые решения, даже медленные.
Спустя 12 минут, 7 секунд (26.01.2012 - 10:52) Семён написал(а):
ХМ....
Придумал, можно ведь получить сгруппированные даты, и к ним просто подгрузить информацию
Придумал, можно ведь получить сгруппированные даты, и к ним просто подгрузить информацию
Спустя 37 секунд (26.01.2012 - 10:53) inpost написал(а):
Семён
Записей много? Если всю логику перенести на JavaScript? То есть загрузятся все записи, а уже после пагинатор построить.
И обязательно ли день иметь целиком на странице?
Если записей много, то можно сделать один раз нечто на подобии файл-кеша, и при первом обращении создавать кеш, далее обращаться к нему.
А построить так:
Генерируем страницы:
Запрос №1, день №1. Если записей <max, то запрос по второму дню, далее по третему, пока не достигнет >= MAX, вот эти дни записываешь как кеш-дат
page = dates
1 => array('01','02','03'),
2 => array('04','05'),
3 => array('06'),
Максимума достигли, счётчик обновили, даты страницы№1 сформировали. Циклом прогонять.
Ну а кеш-дат обновлять именно на уровне админки, когда день проходит или записи добавляются.
Записей много? Если всю логику перенести на JavaScript? То есть загрузятся все записи, а уже после пагинатор построить.
И обязательно ли день иметь целиком на странице?
Если записей много, то можно сделать один раз нечто на подобии файл-кеша, и при первом обращении создавать кеш, далее обращаться к нему.
А построить так:
Генерируем страницы:
Запрос №1, день №1. Если записей <max, то запрос по второму дню, далее по третему, пока не достигнет >= MAX, вот эти дни записываешь как кеш-дат
page = dates
1 => array('01','02','03'),
2 => array('04','05'),
3 => array('06'),
Максимума достигли, счётчик обновили, даты страницы№1 сформировали. Циклом прогонять.
Ну а кеш-дат обновлять именно на уровне админки, когда день проходит или записи добавляются.
Спустя 8 минут, 23 секунды (26.01.2012 - 11:01) Семён написал(а):
Ага строго 1 день целиком на 1 странице.
С кешем идея отличная, но
1) описание данных / статус может меняться в течении 3-4 секунд.
2) выборка данных происходит конкретно для каждого сотрудника + до 15 условий фильтра поиска, поэтому придётся плодить много файлов кэша.
---- JS тоже не подойдёт для данных, которых после запуска будет уже более 200 тыс
и гонять такой объём убийственно.
Как тебе моя идея взять получить через GROUP BY даты пробежаться по ним и подгрузить нужную инфу? Решается в 2 запроса )))
С кешем идея отличная, но
1) описание данных / статус может меняться в течении 3-4 секунд.
2) выборка данных происходит конкретно для каждого сотрудника + до 15 условий фильтра поиска, поэтому придётся плодить много файлов кэша.
---- JS тоже не подойдёт для данных, которых после запуска будет уже более 200 тыс
и гонять такой объём убийственно.
Как тебе моя идея взять получить через GROUP BY даты пробежаться по ним и подгрузить нужную инфу? Решается в 2 запроса )))
Спустя 7 минут, 43 секунды (26.01.2012 - 11:09) inpost написал(а):
Семён
Надо пробовать, но если ты говоришь про более 200 тыс записей, то работать, соответственно, будет долго из-за группировки.
Надо пробовать, но если ты говоришь про более 200 тыс записей, то работать, соответственно, будет долго из-за группировки.
Спустя 15 минут, 51 секунда (26.01.2012 - 11:25) Oyeme написал(а):
0. Группируем массив групп.
1.Подсчитываем общее количество записей в "каждой группе".
2.Пробегаем по массиву и растравляем "позиции групп".Где "какая группа находится " и на какой странице.
Records limit : 20
Group 1->15 = 1 группа в которой 15 записей
Group 1->15 - first page
Group 2->10 - second page
Group 3->10 - second page
Group 4->30 - third
Group 4->2 - fourth
Group 5->5 - fourth
Group 5->40 - fifth
3.При выборе конкретной страницы - загружаем наши группы с данными
Теоретически : следует создать в таблице поле "позицию" с индексами ,в которой мы храним позиции групп.Для выборки.(Если данных > 200k).
1.Подсчитываем общее количество записей в "каждой группе".
2.Пробегаем по массиву и растравляем "позиции групп".Где "какая группа находится " и на какой странице.
Records limit : 20
Group 1->15 = 1 группа в которой 15 записей
Group 1->15 - first page
Group 2->10 - second page
Group 3->10 - second page
Group 4->30 - third
Group 4->2 - fourth
Group 5->5 - fourth
Group 5->40 - fifth
3.При выборе конкретной страницы - загружаем наши группы с данными
Теоретически : следует создать в таблице поле "позицию" с индексами ,в которой мы храним позиции групп.Для выборки.(Если данных > 200k).