Вопрос

Я думаю об этом в течение нескольких дней, и не приезжайте в Grasps (так как я Relativley New для MVC и CI). Я даже не уверен, это проблема с MVC, MySQL или массивами.

Ситуация: 2 Таблицы MySQL

  1. Таблица данные: ID, название, список
  2. Таблица ценности: ID, имя

Запрос данные Таблица приводит к массиву, как следующее (выдержка):

[4] => Array
        (
            [id] => 3
            [title] => Foo                
            [list] => 1,2,3,4,6,14
        )

[5] => Array
        (
            [id] => 4
            [title] => Bar                
            [list] => 2,6,9,12
        )

Поле список Содержит разделенные запятыми значения, которые соответствуют некоторым идентификаторам ценности Таблица вроде

[3] => Array
            (
                [id] => 12
                [name] => 'value12'                
            )

Что я пытаюсь сделать для каждого ряда:

  • принять список-Валены и взорваетесь в массиве
  • Проверьте с результатом набор из ценности-табельный (через метод in_array ())
  • Верните значения имени идентификаторов, если
  • включите это как-то в основной набор результатов (например, в качестве двумерного массива):

    5] => Массив ([ID] => 4 [Название] => Строка [Список] => Array ([0] => значение6 [1] => значение12 ...))

Мой наивный подход до сих пор был

  • Запустите запрос на каждой из 2 столов
  • Сравните 2 набора результатов через In_Array

Моя главная проблема (при попытке строго отдельную модель, контроллер и просмотр): как я могу включить поле имени из таблицы значений в «основной цикл» данные Набор результатов таблицы?

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 (с таким или что-то еще).

Любой намек, даже простая ссылка на информационный бит, высоко ценится.

Спасибо триллион!

потрясающий

Это было полезно?

Решение

Существует отношение многих ко многим между списками и значениями списка. Обычный способ моделирования этого в реляционной базе данных - создать соединительный стол. Итак, я бы структурировал свою схему, как это.

lists : list_id, title
values : value_id, name
list_values : list_id, value_id

list_values это соединительный стол. Это связывает списки со значениями.

Для создания списка вы можете иметь следующие функции в вашей модели

function build_list($list_id)
{
    $list = $this->get_list($list_id);
    $list->values = $this->get_list_values($list_id);
    return $list;
}

function get_list($list_id)
{
    $sql = 'select * from lists where list_id=?';
    return $this->db->query($sql, array($list_id))->row();
}

function get_list_values($list_id)
{
    $sql = 'select v.value_id, v.name
        from list_values lv
        join values v on v.value_id=lv.value_id
        where lv.list_id=?';
    return $this->db->query($sql, array($list_id))->result();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top