Выдача значений и ключей в многомерный массив из базы данных внутри цикла foreach без повторений - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь объединить две таблицы из базы данных, и на основе моей первой я хочу получить некоторые значения из другой и добавить их в массив.

Вот моя проблема:

Моя первая база данных выглядит так:

FIRST TABLE:
id, credit_type, association_name, address, city, province, postal_code, country, cycle_type, cycle_begin, cycle_months

Моя вторая база данных выглядит так:

SECOND TABLE:
id, association_id, designation_name

Идентификатор в моей первой таблице совпадает с association_id во второй таблице, поэтому мне не нужен INNER JOIN.

Мой подход заключается в следующем:

<?php

public function my_function()
{

    $sql = ee()->db->select('*')->from('first_table')->get();

    $data['database'] = [];

    if ($sql->num_rows() > 0)
    {
        foreach($sql->result_array() as $row)
        {   
            $id[] = $row['id'];
            $data['database'][] = $row;
        }

    }

    foreach ($data['database'] as $key => $value) {

        $association_query = ee()->db->query("SELECT * FROM second_table WHERE id = $id");
        foreach($association_query->result_array() as $row_two)
        {
            if ($association_query->num_rows() > 0)
            {
                $data['database'][$key]['associations'][] = $row_two['designation_name'];
            }
        }
    }

    return ee()->load->view('index', $data, true);
}
?>

Синтаксис ee()->db->select('*') - это подготовленная инструкция из механизма выражений, равная SELECT * FROM first_table (sanitaized).

Итак, как вы можете видеть, я пытаюсь передать значение $id, которое является массивом, в мой запрос. Дело в том, что как только я нажимаю это значение $id[] = $row['id'], я создаю хороший массив, но когда я перебираю цикл foreach, он умножает мой массив на многие другие массивы, поэтому я не могу выполнить свой запрос, даже если я технически в цикле foreach.

Плюс, как только я пытаюсь поместить результат моего запроса в мой массив, скажем, меняя идентификатор статического идентификатора, например, для id = 3, я получаю действительно странный результат, как и многие массивы, повторяемые с 1 значение, значение 2, значение 3 и т. д., когда я хочу нажать «связь» моего ключа только там, где он представлен в другой таблице.

1 Ответ

0 голосов
/ 15 мая 2018

Если вы не будете делать это в SQL, по крайней мере, не выполняйте второй запрос столько раз.

<?php

public function my_function()
{
    $assocs = array();
    $data = array('database' => array());

    $association_query = ee()->db->query("SELECT * FROM second_table");
    if ($association_query->num_rows() > 0) {
        foreach($association_query->result_array() as $row) {
            $assocs[$row['association_id'][] = $row['designation_name'];
        }
    }

    $sql = ee()->db->select('*')->from('first_table')->get();    
    if ($sql->num_rows() > 0)   {
        foreach($sql->result_array() as $row) {   
            $id_check = $row['id'];
            if (isset($assocs[$id_check])) {     
                $row ['associations'] = $assocs[$id_check] ;
            }
            $data['database'][] = $row;
        }

    }


    return ee()->load->view('index', $data, true);
}
?>

С уважением

...