连接多次同一个表时出错

时间:2013-11-24 13:45:59

标签: php mysql database codeigniter activerecord

使用一个表多次工作时是否可以连接多个表?让我解释一下。

我有三个表categoriescontentmembers
使用CodeIgniter的ActiveRecord btw。这是我的content_model.php

public function get_content_list(){

    $this->db
        ->select('
            content.id,
            categories.id as catid,
            categories.title as category,
            content.alvl,
            content.ordering,
            content.state,
            content.title,
            content.slug,
            content.text,
            content.views,
            content.aid,
            members.username as author,
        ')
        ->join('categories', 'content.catid = categories.id')
        ->join('categories', 'content.alvl = categories.id') // MARK01
        ->join('members', 'content.aid = members.id');

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

    if($query->num_rows() > 0)
        return $query->result();
    else
        return FALSE;

}

我留下第二行评论为 MARK01 ,这就是问题开始的地方。

现在澄清一下,类别存储在一个数据库表categories中,用于memberscontents(页面,文章等),{{ 1}}依此类推......有一列banners代表组件的ID 并连接到数据库表categories.cid。因此,每当我需要为成员提取类别时,我都会使用components WHERE。它工作正常,直到我需要从多个表中检索JOINed记录,同时多次询问同一个表。

这是一个带有注释行的categories.cid = 3来解释,通过COMMENTED MARK01 行来防止错误:

var_dump()

这是取消注释第二行 MARK01 时的结果:

array (size=3)
  0 => 
    object(stdClass)[41]
      public 'id' => string '1' (length=1)
      public 'catid' => string '5' (length=1)
      public 'category' => string 'News' (length=4)
      public 'alvl' => string '10' (length=2) // Access level
      public 'ordering' => string '1' (length=1)
      public 'state' => string '1' (length=1) // Status ON/OFF
      public 'title' => string 'Qualification for a new production set' (length=38)
      public 'slug' => string 'qualification-for-a-new-production-set' (length=38)
      public 'text' => string 'Very long text blablabla"'... (length=2629)
      public 'views' => string '13' (length=3)
      public 'aid' => string '1' (length=1)  // Author ID
      public 'author' => string 'aspirinemaga' (length=12)

知道这里有什么问题吗?

1 个答案:

答案 0 :(得分:2)

如果你加入表格超过1次,你必须给他们不同的名字。

... JOIN categories categories2 ON content.catid = categories2.id...

在这种情况下,您应该使用“categories2”来定义“ON”。对于“SELECT”,也使用新名称

对于codeigniter活动记录,您可以尝试

$this->db->join('categories AS categories2',...)