Запрос к бд через xPDO

День добрый!
Вопрос в том, как правильно сделать запрос к бд.
Есть массив $massiv:
Array (
[0] => 129
[1] => 122
[2] => 106
)

Делаю запрос:
$query = $modx->newQuery('modResource');
$query->select(array('modResource.*'));
$query->where(array('id:IN' => $massiv, 'isfolder' => 0));
$result = $modx->getCollection('modResource', $query);
Результам выборки идут айдишники в порядке 106, 122, 129. Не в том порядке, который необходим. А нужно в том же порядке, в котором указано в $massiv. Нашел как правильно сделать запрос (http://phpclub.ru/talk/threads/mysql-in-%D0%B8-%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0.12493/) — добавить к моему запросу ORDER BY FIND_IN_SET(id, '129,122,106'), но не могу понять, как это применить к моему xPDO запросу.
Результатом запроса должны быть ресурсы в порядке 129, 122, 106.
Sphinx
27 февраля 2015, 07:31
modx.pro
2 596
0

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

GrinRom
27 февраля 2015, 10:59
0
Если хочешь чтобы были с конца до начала, добавь:
$query->sortby('id', 'DESC');
Вообще эта штука поможет сортировать по нужному полю (вместо id можно другое вписать) и в нужной последовательности( ASC — по возрастанию, DESC — по убыванию)
rtfm.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.sortby
    Sphinx
    27 февраля 2015, 11:08
    0
    Неудачный вариант привел выше. К сожалению айдишники могут быть в произвольном порядке, а не по возрастанию или убыванию.
    Массив можно представить как
    Array (
    [0] => 122
    [1] => 129
    [2] => 106
    )
    Тогда результатом запроса должны быть ресурсы в порядке 122, 129, 106.
    Sphinx
    27 февраля 2015, 11:35
    0
    Я так понимаю нужно что-то вроде:
    $query->sortby('FIND_IN_SET(modResource.id, $massiv)');
    Надо правильно это записать…
      GrinRom
      27 февраля 2015, 12:35
      0
      $query->sortby('FIELD(modResource.id, '.$massiv.' )');

      Попробуйте так. Взято с официальной документации:
      rtfm.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.sortby
        Sphinx
        27 февраля 2015, 12:51
        1
        0
        Слона то я и не заметил. Главное смотрел же на этот пример)
        Спасибо, вроде все заработало, только пришлось чуть изменить:
        $query->sortby('FIELD(modResource.id, '.implode(',', $massiv).' )');
        С массивом не захотел работать, а со строкой из ресурсов без проблем)
      Сергей Шлоков
      27 февраля 2015, 13:06
      0
      Например, так
      $ids = implode(',',$massiv);
      $query = $modx->newQuery('modResource');
      $query->select(array('modResource.*'));
      $query->where(array('id:IN' => $massiv, 'isfolder' => 0));
      $query->sortby('FIELD(modResource.id,'.$ids.')');
      $result = $modx->getCollection('modResource', $query);
      Упс. Уже написали выше.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6