在codeigniter中选择连接和分组

时间:2018-03-14 01:59:06

标签: join group-by codeigniter-3

在Codeigniter3中,我有以下选择连接模型:

public function get_post()
{
    $q = $this->db->select('posts.id, posts.active, posts.title, posts.close_date, users.name')
    ->from('posts')
    ->join('users', 'posts.user_id = users.id', 'left')
    ->where('posts.active','1')
    ->where(['posts.active' => '1', 'posts.close_date  >=' => date('Y-m-d')])
    ->order_by('posts.updated_at', 'DESC')->get();
    return $q;
}

如何列出每个用户的点数帖子的所有帖子(只计算posts.active = 1和posts.close_date> =当前日期的帖子)?

如果CI无法完成这项工作,请给我sql查询。

1 个答案:

答案 0 :(得分:0)

你走了:

对于这样的复杂查询,最好的方法是将sql脚本存储在字符串变量中,并使用$this->db->query()来执行它。

此查询位于 MySQL

public function get_posts() {
    $sql = "
        SELECT `posts`.`id`, `posts`.`active`, `posts`.`title`, `posts`.`close_date`, users.name, COUNT(`posts`.`user_id`) AS `active_post_count`
        FROM `posts`
        LEFT JOIN `users` ON `posts`.`user_id` = `users`.`id`
        WHERE `posts`.`active` = ?
        AND `posts.close_date` >= ?
        ORDER BY `posts`.`updated_at` DESC;
    ";

    $now = new DateTime('now');
    $binds = [1, $now->format('Y-m-d H:i:s')];
    return $this->db->query($sql, $binds)->result_array();
}

以下是有关如何访问帖子计数的示例代码:

$this->Your_model->get_posts()[0]['active_post_count'];

请参阅Generating Query Results上的CodeIgniter文档:

如果您希望将结果作为对象,请使用result_object()而不是result_array()