我正在联接三个表,但我想将这些表之一的值分别用于其他两个表

时间:2018-12-26 03:18:33

标签: mysql codeigniter join codeigniter-3

我有3个表格问题,答案和评论,其中同一问题有多个答案,而单个答案有很多评论。

我想展示谁回答了这个问题,以及谁评论了这个答案。

我也想向用户显示答复的用户和对相同答案发表评论的用户。

因此,请帮助我在表的答案和注释中两次加入同一用户表。

表格:问题:id,文本,user_id(fk)

表格:答案:id,que_id(fk),user_id(fk),文本

表格:注释:id,ans_id(fk),user_id(fk),文本

表:用户:ID,名称

$this->db->select('answers.id as aid,
                   answers.user_id as auser_id,
                   answers.text as atext,
                   comments.id as cid,
                   comments.user_id as cuser_id,
                   comments.text as ctext,
                   users.id as uid,
                   users.name as uname');
$this->db->from('answers');
$this->db->join('users','answers.user_id = users.id', 'left');
$this->db->join('ans_comments','answers.id = comments.ans_id', 'left');
$this->db->join('users','comments.user_id = users.id', 'left');
$this->db->where('que_id','1');
return $this->db->get();

我的问题是:

  

我得到所有评论的相同用户。

     

我想要不同的评论者来发表不同的评论。

1 个答案:

答案 0 :(得分:1)

如果要两次连接同一张表,则应使用其他名称:

测试

$this->db->select('A.id AS A_id,
                   A.uid AS A_uid,
                   A.text AS A_text,
                   C.id AS C_id,
                   C.uid AS C_uid,
                   C.text AS C_text,
                   UA.id AS UA_id,
                   UA.name AS UA_name,
                   UC.id AS UC_id,
                   UC.name AS UC_name');
$this->db->from('answers AS A');
$this->db->join('comments AS C','C.aid = A.id', 'left');
$this->db->join('users AS UA','A.uid = UA.id', 'left');
$this->db->join('users AS UC','C.uid = UC.id', 'left');
$this->db->where('qid', 1);
$query = $this->db->get();

$result = $query->result_array();

如果您发现我为每个联接使用了一个不同的名称,并使用该名称来获取相关数据,那么如果您想要答案的用户名,则可以使用UA.name,并且如果您想要该名称,对您的用户UC.name进行注释,即可为您提供所需的所有灵活性。