Группировка при выводе (getCollection)
Приветствую. Уже мозг сломал, выдумывая вариант решения такой задачки:
Есть записи в таблице, примерно такого вида:
При перехода например на site.ru/list/10/ выдераю из базы и вывожу все записи с pid = 10 (с сортировкой по дате добавления). Всё пока просто и понятно:
Сложность заключается в следующем:
Иногда по роуту (например тот-же /list/10/) надо передавать массив id-шек и выбирать все записи с переданными id. Тут вроде тоже всё понятно:
То есть, например получая записи с pid == 10,12,11, на выход получить:
У меня получается группировать и выводить по дате, но вот первым вывести записи с нужным мне id не получается.
Плюс ко всему записей очень много, и вывожу я их по страницам. Так-то можно было бы это реализовать выбрав все записи, запихнув их в массив и нужным способом отсортировать и сгруппировать весь этот огромный массив, но что-то я не уверен, что это хорошо и правильно.
Буду благодарен за советы.
Спасибо.
Есть записи в таблице, примерно такого вида:
id | pid | text | date
1 10 --- ---
2 12 --- ---
3 15 --- ---
4 11 --- ---
5 19 --- ---
6 12 --- ---
7 11 --- ---
8 10 --- ---
При перехода например на site.ru/list/10/ выдераю из базы и вывожу все записи с pid = 10 (с сортировкой по дате добавления). Всё пока просто и понятно:
....
$q->where(array(
'pid' => $pid, // 10
));
$result = $modx->getCollection('MyPack', $q);
....
Сложность заключается в следующем:
Иногда по роуту (например тот-же /list/10/) надо передавать массив id-шек и выбирать все записи с переданными id. Тут вроде тоже всё понятно:
$q->where(array(
'pid:IN' => $ArrayID
...
А вот как сгруппировать полученные записи по pid, и одновременно по дате, да ещё и чтоб записи, id которых передаётся в роуте (/list/10) выводилось первым.То есть, например получая записи с pid == 10,12,11, на выход получить:
1 10 --- ---
8 10 --- ---
2 12 --- ---
6 12 --- ---
4 11 --- ---
7 11 --- ---
У меня получается группировать и выводить по дате, но вот первым вывести записи с нужным мне id не получается.
Плюс ко всему записей очень много, и вывожу я их по страницам. Так-то можно было бы это реализовать выбрав все записи, запихнув их в массив и нужным способом отсортировать и сгруппировать весь этот огромный массив, но что-то я не уверен, что это хорошо и правильно.
Буду благодарен за советы.
Спасибо.
Комментарии: 1
Всё отлично, вроде как выход найден.
...
$q->sortby('FIELD(MyPack.pid, '.implode(',', $ArrayID).' )', 'ASC');
$q->where(array(
'pid:IN' => $ans,
));
...
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.