Я новичок в PHP / MySQL и супер-новичок в CodeIgniter. У меня есть информация во многих таблицах MySQL. Я хочу получить его с помощью JOIN, где первичные ключи таблиц равны переменной $ … Как я могу это сделать и получить все поля без поля первичного ключа ???
То, что я сейчас делаю, – это только две таблицы:
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), который я не хочу получать, потому что у меня уже есть.
Джон прав. Вот пример:
$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
Связывание запросов в CodeIgniter
Звездочка вернет все поля. Чтобы вернуть подмножество из них, т. Е. Все поля в отдельности образуют повторяющееся поле id, просто перечислите нужные вам столбцы, а не используйте '*'.
Часто бывает неплохо не использовать звездочку в любом случае. В будущем приложение может добавить в таблицу большое поле, которое будет излишним по отношению к вашим требованиям и замедлит ваши запросы.
Проще говоря, с цепочкой методов:
$this->db->select('*') ->from('movies') ->join('posters', 'movies.id= posters.id') ->where('movies.id', $id) ->get();
$this->db->select('*'); $this->db->from('blogs'); $this->db->join('comments', 'comments.id = blogs.id'); $query = $this->db->get();