Запрос к бд через xPDO
День добрый!
Вопрос в том, как правильно сделать запрос к бд.
Есть массив $massiv:
Array (
[0] => 129
[1] => 122
[2] => 106
)
Делаю запрос:
Результатом запроса должны быть ресурсы в порядке 129, 122, 106.
Вопрос в том, как правильно сделать запрос к бд.
Есть массив $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.
Комментарии: 6
Если хочешь чтобы были с конца до начала, добавь:
rtfm.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.sortby
$query->sortby('id', 'DESC');
Вообще эта штука поможет сортировать по нужному полю (вместо id можно другое вписать) и в нужной последовательности( ASC — по возрастанию, DESC — по убыванию)rtfm.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.sortby
Неудачный вариант привел выше. К сожалению айдишники могут быть в произвольном порядке, а не по возрастанию или убыванию.
Массив можно представить как
Array (
[0] => 122
[1] => 129
[2] => 106
)
Тогда результатом запроса должны быть ресурсы в порядке 122, 129, 106.
Массив можно представить как
Array (
[0] => 122
[1] => 129
[2] => 106
)
Тогда результатом запроса должны быть ресурсы в порядке 122, 129, 106.
Я так понимаю нужно что-то вроде:
$query->sortby('FIND_IN_SET(modResource.id, $massiv)');
Надо правильно это записать… $query->sortby('FIELD(modResource.id, '.$massiv.' )');
Попробуйте так. Взято с официальной документации:
rtfm.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.sortby
Слона то я и не заметил. Главное смотрел же на этот пример)
Спасибо, вроде все заработало, только пришлось чуть изменить:
Спасибо, вроде все заработало, только пришлось чуть изменить:
$query->sortby('FIELD(modResource.id, '.implode(',', $massiv).' )');
С массивом не захотел работать, а со строкой из ресурсов без проблем)
Например, так
$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);
Упс. Уже написали выше.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.