CodeIgniter / PHP / MySQL: получение данных с помощью JOIN - PullRequest
6 голосов
/ 27 апреля 2009

Я новичок в PHP / MySQL и супер новичок в CodeIgniter. У меня есть информация во многих таблицах MySQL. Я хочу получить его с помощью JOIN, где первичные ключи таблиц равны $ variable ... Как я могу это сделать и получить все поля без поля первичного ключа ???

Что я сейчас делаю, так это (здесь объединены только две таблицы):

function getAll($id) {

    $this->db->select('*');
    $this->db->from('movies');
    $this->db->join('posters', 'movies.id= posters.id');
    // WHERE id = $id ... goes here somehow...
    $q = $this->db->get();

    if ($q->num_rows() == 1) {
        $row = $q->row();
        $data = array(
                'id' => $row->id,
                'title' => $row->title,
                'year' => $row->year,
                'runtime' => $row->runtime,
                'plotoutline' => $row->plotoutline,
                'poster_url' => $row->poster_url
            );
    }

    $q->free_result();
    return $data;

id (PK), title, year, runtime и plotoutline - это столбцы из первой таблицы, а poster_url - это поле из второй таблицы. Вторая таблица также содержит столбец идентификатора (PK), который я не хочу получать, потому что у меня уже есть.

Ответы [ 4 ]

21 голосов
/ 28 апреля 2009

Джон прав. Вот пример:

$this->db->select('movies.id, 
                   movies.title, 
                   movies.year, 
                   movies.runtime as totaltime,  
                   posters.poster_url');
$this->db->from('movies');
$this->db->join('posters', 'movies.id= posters.id');
$this->db->where('movies.id', $id);
$q = $this->db->get();

Это вернет объекты, которые имеют свойства -> id, -> title, -> year, -> totaltime и -> poster_url. Вам не понадобится дополнительный код для извлечения данных из каждой строки.

Не забывайте, что если синтаксис Active Record становится немного громоздким, вы можете использовать полные запросы SQL и получить те же результаты:

$sql = "SELECT movies.id,
        movies.title,
        movies.year,
        movies.runtime as totaltime,
        posters.poster_url
        FROM movies
        INNER JOIN posters ON movies.id = posters.id
        WHERE movies.id = ?"

return $this->db->query($sql, array($id))->result();

Обе формы обеспечат правильное экранирование ваших данных.

CodeIgniter Active Record

Связывание запросов в CodeIgniter

4 голосов
/ 27 апреля 2009

Звездочка вернет все поля. Чтобы вернуть их подмножество, т. Е. Все поля, кроме поля повторяющегося идентификатора, просто перечислите столбцы, которые вам нужны, а не используйте «*».

Часто хорошей идеей является не использовать звездочку в любом случае. В будущем приложение может добавить в таблицу большое поле, которое будет лишним ваших требований и замедлит ваши запросы.

1 голос
/ 28 октября 2011

Проще говоря, методом цепочки:

$this->db->select('*')
         ->from('movies')
         ->join('posters', 'movies.id= posters.id')
         ->where('movies.id', $id)
         ->get();
0 голосов
/ 24 мая 2016
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...