Я думаю об этом уже несколько дней и не понимаю (поскольку я относительно новичок в 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'
)
Что я пытаюсь сделать для каждой строки:
- взять список-values и взорвать его в массив
- проверить набор результатов из таблицы values (через метод in_array())
- вернуть значения имен идентификаторов, если
включите его каким-либо образом в основной набор результатов (например, в виде двумерного массива):
[5] => Массив ( [id] => 4 [title] => Bar [list] => Array ( [0] => value6 [1] => value12 ... ) )
Мой наивный подход до сих пор состоял в том, чтобы
- выполнить запрос для каждой из двух таблиц
- сравните 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 или чего-то еще).
Любая подсказка, даже простая ссылка на информационный бит, высоко ценится.
Триллион спасибо!
потрясающий