【发布时间】:2011-08-17 09:18:56
【问题描述】:
我有 2 张桌子。
表 1(项目):id、名称、类型
表 2(project_ratings):project_id、rating
有些项目没有评级。
SELECT `p`.`id`, `p`.`name`, AVG(pr.rating) FROM (`projects` p) JOIN `project_ratings` pr ON `p`.`id` = `pr`.`project_id` WHERE `p`.`type` = 'group' OR `p`.`type` = 'user';
我想返回所有项目,如果没有任何评分则返回 NULL。这个查询只返回那些有评分的。
我试过左连接、右连接、全连接,还是一样。
使用 CodeIgniter 活动记录:
$this->db->select("p.id, p.name, AVG(pr.rating)");
$this->db->from('projects p');
$this->db->join('project_ratings pr', 'p.id = pr.project_id');
$this->db->where('p.type', 'group');
$this->db->or_where('p.type', 'user');
$res = $this->db->get();
我错过了什么?
【问题讨论】:
-
这是
LEFT JOIN的定义,但我认为您对AVG聚合的使用不适用于此 -
我试过左连接...仍然返回 1 个结果..我想要所有
-
我感觉你需要
GROUP BY p.id, p.name但是我仍然认为第三列不会显示正确的值。我可能错了,但我懒得自己测试 -
GROUP BY 成功了。如果你能把它作为一个完整的答案来回答,我可以给你信用:) 谢谢
-
连同左外连接。忘记添加了
标签: php sql codeigniter