Вопрос о запросе базы данных Codeigniter - PullRequest
0 голосов
/ 14 февраля 2011

Я выполняю следующие запросы в codeigniter и не могу понять, как заставить работать второй запрос. Как я могу получить массив только значений из моего первого запроса и использовать его во втором?

function application()
{
    $user_id = $this->tank_auth->get_user_id();
    $this->db->select('app_id')->from('using')->where('user_id' , $user_id);
    $query = $this->db->get();

    $row = $query->result_array();

    if ($query->num_rows() > 0) :
    $this->db->select('app_name')->from('applications')->where('id' , $row['app_id']);
    $body['query'] = $this->db->get();
    endif;

    $this->load->view('apps_view', $body);

Если я закомментирую второй запрос и var_dump($row); это дает мне: массив (2) {[0] => массив (1) {[«app_id»] => строка (1) «2»} [1] => массив (1) {[«app_id»] => строка (1 ) «3»}}

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

Спасибо за помощь.

1 Ответ

2 голосов
/ 14 февраля 2011

Ожидаете ли вы, что первый запрос вернет только одну строку?

Если это так, вам следует использовать:

$query = $this->db->get();

$row = $query->row();

$app_id = $row->app_id;
//etc

ЭтоНепонятно из вашего вопроса.

Если ваш первый запрос возвращает (или может вернуть) несколько строк, то вам нужно сделать следующее:

$query = $this->db->get();

if ($query->num_rows() > 0) :
    foreach($query->result_array() as $row)
    {
        $this->db->select('app_name')
                 ->from('applications')
                 ->where('id' , $row['app_id']);
    }

    $body['query'] = $this->db->get();
endif;
// etc

вы очень можетену надо корректировать код, так как я не уверен, какой у вас желаемый результат.Вы видите разницу?

Если вы вернете result_array, у вас будет массив результатов (представьте себе!) - следовательно, почему у вашего var_dump есть [0]=> array(1) и т. Д. - есть массив для каждой возвращаемой строки.

Если вы хотите / ожидаете вернуть только один результат из первого запроса, вы должны использовать row.

Надеюсь, это имеет смысл - должен быть толчок в правильном направлении.

edit На самом деле это может быть правильный синтаксис:

$query = $this->db->get();

if ($query->num_rows() > 0) :
    $this->db->select('app_name')->from('applications');
    foreach($query->result_array() as $row)
    {
        $this->db->where('id' , $row['app_id']);
        // build the `where...` string with iteration/result/row
    }

    $body['query'] = $this->db->get(); // now we get the data.
endif;
// etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...