Как в CodeIgniter ПРИСОЕДИНИТЬ одну таблицу к другой, если значение столбца найдено в другом столбце, содержащем список,Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как в CodeIgniter ПРИСОЕДИНИТЬ одну таблицу к другой, если значение столбца найдено в другом столбце, содержащем список,

Сообщение Anonymous »

Я не уверен, связана ли это с 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 (с помощью метода in_array())
  • вернуть значения имен идентификаторов, если
  • как-то включить его в основной набор результатов (например, в виде двумерного массива):

Код: Выделить всё

[5] => Array (
[id] => 4
[title] => Bar
[list] => Array (
[0] => value6
[1] => value12
...
)
)
До сих пор мой наивный подход заключался в том, что
  • выполнил запрос к каждой из двух таблиц.
  • сравнил два набора результатов через 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 или чего-то еще).


Подробнее здесь: https://stackoverflow.com/questions/432 ... found-in-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»