Codeigniter - 活动记录 - sql - 复杂连接

时间:2011-03-04 15:21:55

标签: php sql codeigniter activerecord

我有一个从表中检索所有标签的函数:

function global_popular_tags() {
    $this->db->select('tags.*, COUNT(tags.id) AS count');
    $this->db->from('tags');
    $this->db->join('tags_to_work', 'tags.id = tags_to_work.tag_id');
    $this->db->group_by('tags.id');
    $this->db->order_by('count', 'desc'); 
    $query = $this->db->get()->result_array();
    return $query;
}

我有另一张名为'work'的表。 'work'表有一个'draft'列,其值为1或0.我希望COUNT(tags.id)考虑具有特定标记的工作是否处于草稿模式(1)。< / p>

假设有10件作品被标记为“设计”。 COUNT将是10.但是这些工作中有2个处于草稿模式,因此COUNT应该是8.我该如何管理?

2 个答案:

答案 0 :(得分:7)

尝试更改:

$this->db->from('tags');
$this->db->join('tags_to_work', 'tags.id = tags_to_work.tag_id');

要:

$this->db->from('tags, work');
$this->db->join('tags_to_work', 'tags.id=tags_to_work.tag_id AND work.id=tags_to_work.work_id');

并添加:

$this->db->where('work.drafts', 0);

答案 1 :(得分:2)

你可以使用纯sql而不是使用活动记录类,我自己正在使用CI超过2年,而且大部分时间我都在避免使用活动记录类,导致直接sql更容易调试和编写复杂查询。 这就是我如何使用它。

$sql = "SELECT...your sql here";
$q = $this->db->query($sql);
...
//Do something with your query here