Группировка при выводе (getCollection)

Приветствую. Уже мозг сломал, выдумывая вариант решения такой задачки:

Есть записи в таблице, примерно такого вида:

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 не получается.

Плюс ко всему записей очень много, и вывожу я их по страницам. Так-то можно было бы это реализовать выбрав все записи, запихнув их в массив и нужным способом отсортировать и сгруппировать весь этот огромный массив, но что-то я не уверен, что это хорошо и правильно.

Буду благодарен за советы.
Спасибо.
Александр
05 декабря 2016, 12:42
modx.pro
1 026
0

Комментарии: 1

Александр
05 декабря 2016, 17:11
+1
Всё отлично, вроде как выход найден.

...
$q->sortby('FIELD(MyPack.pid, '.implode(',', $ArrayID).' )', 'ASC');
$q->where(array(
    'pid:IN' => $ans,
    ));
...
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1