У меня есть строка с идентификаторами изображений (полученная из другой таблицы mysql) и преобразованная в массив:
$idstring = "12, 18, 3, 392, 0, 9, 44";
$idarray = explode(',', $idstring);
Основываясь на этом массиве идентификаторов, я хочу получить все строки из моей "мультимедийной" таблицы mysql.
$result = $this->db->select('*')
->from('media')
->where_in('id', $ids)
->get()->result_array();
Проблема заключается в том, что значения массива $result
находятся в таком странном порядке, как это:
$result order : 44, 9 ,0 ,18 ,3 ,392 ,12 ...
Но мне нужно, чтобы они оставались, как в моем порядке $ string string/array...
Я пробовал 4 подхода к решению проблемы до сих пор:
Получить строки в цикле без where_in()
- что создает много запросов - но работает пока...
$idstring
порядок массива $result
на основе порядка $idstring
или $idarray
, хотя мне не удалось найти рабочий результат, и я не понимаю, почему этот шаг необходим вообще
Попробуйте установить сам запрос. Я слышал об ORDER_BY
и FIND_IN_SET
, $ids
но я не мог получить его в своем рабочем запросе на основе кода и не знаю о производительности, если это действительно помощь
Поэтому в заключение, я думаю, что это должна быть простая повседневная задача, я просто хочу получить кучу картин в определенном порядке с помощью codeigniter.
Я пропустил здесь простое решение?
Используйте функцию Field()
для mysql
$result = $this->db->select('*')
->from('media')
->where_in('id', $ids)
->order_by("FIELD(id,".join(',',$ids).")")
->get()
->result_array()
это должно быть что-то вроде
FIELD(id,12, 18, 3, 392, 0, 9, 44)
Field()
возвращает индексную позицию списка с разделителями-запятыми
$idstring
можно использовать вместоjoin(',',$idarray)
"FIELD(id,".$idstring.")"
Будет работать, если вы хотите сделать с$idstring