codeigniter中的复杂连接

时间:2013-02-21 20:42:41

标签: codeigniter join

我希望你能帮助我,因为我的大脑现在正在流血:

具体解释:

在我的网站上,我有一张桌子。 A vs.是两张图片之间的投票。

表格包含2个字段:第一张图片为 id_pic1 ,第二张为 id_pic2

每个vs.与评论表( id_versus )和用户表( id_versus )相关联。

最后一件事是:每张照片上的每张照片都是表格投票的链接(id_pic,id_versus)

我以前使用cakePhP所以包含使查询变得容易,但是现在,使用CI,我的大脑被冻结了。

如果有人可以帮我解决我应该做的一般性问题,我会感激生活。

提前致谢

编辑: 这是db的简化视图:

id_pic1 id_pic2 id_author

用户 ID

图片 ID

评论 id_versus id_author

表决 id_versus id_pic

2 个答案:

答案 0 :(得分:0)

这是在CI中完成多个连接的方式,根据此

创建
       $this->db->select('aw.id,awt.title,aw.price,aw.email,aw.is_shop as star_shop,aw.video');
        $this->db->from('artworks aw');
        $this->db->join('artwork_translations awt', 'aw.id = awt.artwork_id');
        $this->db->join('languages l', 'l.id = awt.language_id');
        $this->db->where('l.code', $language_code);
        $this->db->where('awt.status', 1);
        $this->db->where('aw.artist_id', $artist_id);
        $this->db->order_by('aw.id DESC');

        $sub_categories = $this->db->get();

        return $sub_categories->result();

答案 1 :(得分:0)

您的桌面布局似乎不完整或缺少信息 表格如何相互连接?

此外,您要选择哪些数据以及哪些参数?
是否也可以在users-table中找到用户的authord?

你想选择一个vs.(参数= id_versus)并从中选择所有数据吗?

function showDataFromVersus($versusToShow) {
    $this->db->select('*');                                  // select all data
    $this->db->from('versus');                               // get data from table versus
    $this->db->join('pics', 'pics.id = versus.id_pic1');     // get data pic2
    $this->db->join('pics', 'pics.id = versus.id.pic2');     // get data pic1
    $this->db->join('users', 'users.id = versus.id_author'); // get data versus author
    $this->db->join('comments', 'comments.id_versus = versus.id');  // select comments
    $this->db->join('users', 'users.id = comments.id_author');  // get data comment author
    $this->db->join('vote', 'vote.id_versus = versus.id');   // get votes
    $this->db->where('versus.id', $versusToShow);
}

此函数接受对数id并返回链接到它的所有数据。

对此的MySQL查询将是

SELECT *
    FROM versus
        JOIN pics ON pics.id = versus.id_pic1
        JOIN pics ON pics.id = versus.id_pic2
        JOIN users ON users.id = versus.id_author
        JOIN comments ON comment.id_versus = versus.id
        JOIN users ON users.id = comments.id_author
        JOIN vote ON vote.id_versus = versus.id
    WHERE versus.id = 1

结果将包含很多列,我还没有经过测试,CodeIgniter可以使用双列名称。
还会有相当多的“双重”'行。对于每个评论和每个投票,将有一个具有相同的对数据

的新行
| ------------- VERSUS --------------| - PIC1 - | - PIC2 - | - USERS - | --------- COMMENT --------- | ------ VOTE ------ |
| id | id_pic1 | id_pic2 | id_author | id | ... | id | ... | id | .... | id_versus | id_author | ... | id_versus | id_pic |