在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查询。
答案 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()
。