6

我是 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 是第二个表中的字段。第二个表还包含一个我不想检索的 ID (PK) 列,因为我已经有了。

4

4 回答 4

21

乔恩是对的。这是一个例子:

$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 中的查询绑定

于 2009-04-27T21:38:26.093 回答
4

星号将返回所有字段。要返回其中的一个子集,即除了重复的 id 字段之外的所有字段,只需列出您需要的列,而不是使用“*”。

无论如何不要使用星号通常是个好主意。在应用程序的未来,有人可能会在表中添加一个大字段,这将超出您的要求,并且会减慢您的查询速度。

于 2009-04-27T15:15:06.220 回答
1

简单地说就是方法链:

$this->db->select('*')
         ->from('movies')
         ->join('posters', 'movies.id= posters.id')
         ->where('movies.id', $id)
         ->get();
于 2011-10-28T16:25:32.747 回答
0
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();
于 2016-05-24T12:26:06.947 回答