Я думаю об этом уже несколько дней и не зацикливаюсь (так как я новичок в MVC и CI). Я даже не уверен, является ли это проблемой с MVC, MySQL или массивами.
Ситуация: 2 таблицы MySQL
- Таблица Данные : идентификатор, заголовок, список
- Таблица Значения : идентификатор, имя
Запрос к таблице data приводит к массиву, подобному следующему (отрывок):
[4] => Array
(
[id] => 3
[title] => Foo
[list] => 1,2,3,4,6,14
)
[5] => Array
(
[id] => 4
[title] => Bar
[list] => 2,6,9,12
)
Поле list содержит значения, разделенные запятыми, которые соответствуют некоторым идентификаторам таблицы values , например
[3] => Array
(
[id] => 12
[name] => 'value12'
)
Что я пытаюсь сделать для каждой строки:
- взять список -значений и разбить его на массив
- проверка с набором результатов из значений -таблицы (с помощью метода in_array ())
- возвращает значения имен идентификаторов, если
включить его каким-либо образом в основной набор результатов (например, в виде двумерного массива):
[5] => Массив (
[id] => 4
[title] => Бар
[list] => Array (
[0] => значение6
[1] => значение12
...
)
)
Мой наивный подход до сих пор был
- выполнить запрос к каждой из 2 таблиц
- сравнить 2 набора результатов с помощью in_array
Моя основная проблема (при попытке строго отделить модель, контроллер и представление): как включить поле имени из таблицы значений в "основной цикл" набора результатов таблицы data ?
if($q->num_rows() > 0)
{
$data[] = $q->result_array();
foreach ($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
Если я использую следующий (громоздкий) подход, я каждый раз получаю новый предмет:
foreach ($q->result_array() as $row)
{
$data[]['id'] = $row['id'];
$data[]['title'] = $row['title'];
$data[]['list'] = $row['year'];
}
Поскольку это база данных MySQL, я не вижу способа выполнить разнесение и сравнение в SQL (с помощью LIKE или чего-то еще).
Любая подсказка, даже простая ссылка на информационный бит, высоко ценится.
Спасибо за триллион!
ФАБ