codeigniter извлекает таблицу mysql с where_in + сохраняет порядок массива ключей в массиве результатов

0

У меня есть строка с идентификаторами изображений (полученная из другой таблицы 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 подхода к решению проблемы до сих пор:

  1. Получить строки в цикле без where_in() - что создает много запросов - но работает пока...

  2. $idstring порядок массива $result на основе порядка $idstring или $idarray, хотя мне не удалось найти рабочий результат, и я не понимаю, почему этот шаг необходим вообще

  3. Попробуйте установить сам запрос. Я слышал об ORDER_BY и FIND_IN_SET, $ids но я не мог получить его в своем рабочем запросе на основе кода и не знаю о производительности, если это действительно помощь

Поэтому в заключение, я думаю, что это должна быть простая повседневная задача, я просто хочу получить кучу картин в определенном порядке с помощью codeigniter.

Я пропустил здесь простое решение?

Теги:
arrays
codeigniter

1 ответ

3

Используйте функцию 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() возвращает индексную позицию списка с разделителями-запятыми

  • 0
    $idstring можно использовать вместо join(',',$idarray)
  • 0
    @PhilippMaurer Я думаю, это "FIELD(id,".$idstring.")" Будет работать, если вы хотите сделать с $idstring
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню