codeigniter从第二个表id加入第三个表id多行

时间:2017-09-06 18:51:19

标签: php mysql codeigniter

我想加入多个表格,如我的图片所示: enter image description here

这是我的代码:

$this->db->select('
  pt2.turl as `p_img`,
  p.title as `p_title`,
  p.text as `p_text`,
  p.create as `p_date`,
  pt3.turl as `c_img`,
  u.name as `c_name`,
  c.text as `c_text`,      
  c.create as `c_date`
');

$this->db->from('posts as p, users as u, photos as pt2, photos as pt3');    
$this->db->join('comments as c', 'p.id=c.pid AND u.id=c.uid');
$this->db->join('posts as p2', 'p2.pid=pt2.id', 'rihgt');
$this->db->join('users as u2', 'u2.photoid=pt3.id', 'right');
$this->db->order_by('c.id', 'DESC');
$this->db->limit('7');
$qry = $this->db->get();
return $qry->result();

2 个答案:

答案 0 :(得分:0)

如果我理解正确,这就是你要找的东西。我没有尝试过,所以它可能不准确,但你不需要为连接中的同一个表创建2个表关联(pt2和pt3)。只需将它们包含在选择中并加入唯一ID

即可

“左”是一个以你离开桌子为中心的联接,所以一切都悬而未决。由于您要在照片表之前加入users表,因此您应该可以加入其列。

希望这会有所帮助。如果我错过了什么,请告诉我。 :)

$select = array(
    pt2.turl as `p_img`,
    p.title as `p_title`,
    p.text as `p_text`,
    p.create as `p_date`,
    pt2.turl as `c_img`,
    u.name as `c_name`,
    c.text as `c_text`,      
    c.create as `c_date`
);

//Set tables to variables. Just makes it easier for me
$postsTable = "posts as p"; //This will be your left table. 
$userTable = "Users as u";
$commentsTable = "comments as c";
$photosTable = "photos as pt2";

$this
    ->db
        ->select($select)
        ->from($postsTable)
            ->join($userTable, "p.uid = u.id", "left")
            ->join($commentsTable, "p.cid = c.id", "left")
            ->join($photosTable, "u.photoid = pt2.id", "left")
        ->get();

答案 1 :(得分:0)

我自己解决了这个问题 它会是这样的:

$select= array (
    //'*',
    'pt.turl p_img',
    'p.title p_title',
    'p.text p_text',
    'p.create p_date',
    'pt2.turl c_img',
    'c.text c_text',
    'u.name c_name',
    'c.create c_date'
);

$from = array (
    'posts p'
);

$qry = $this
        ->db
          ->select($select)
          ->from($from)
          ->join('comments c', 'c.pid=p.id')
          ->join('photos pt', 'pt.id=p.pid')
          ->join('users u', 'u.id=c.uid')
          ->join('photos pt2', 'u.photoid=pt2.id')
          ->order_by('c.create', 'DESC')
          ->limit('7')
          ->get();    

return $qry->result();