使用CodeIgniter和Active Record进行项目。
我面对一个查询问题:我有3个表在我的数据库,我想不仅要加入,而且要使计数2。表分别用user_id, store_user_id, event_user_id字段链接
表1:useruser_id
表2:storestore_user_id
表3:事件event_user_id
我想做的是:
1 -从用户处获取所有数据2 -计算store_user_id = user_id的商店数量(可能是0)3 -统计event_user_id = user_id的事件个数(可能是0)
我已经在我的函数中这样做了:
$this->db->select('*');
$this->db->select('COUNT(s.store_user_id) as total_store', FALSE);
$this->db->select('COUNT(e.event_user_id) as total_event', FALSE);
$this->db->from('user u');
$this->db->join('store s', 's.store_user_id = u.user_id', 'left'); // this joins the user table to store table
$this->db->join('event e', 'e.event_user_id = u.user_id', 'left'); // this joins the user table to event table
$this->db->group_by('u.user_id');
$q = $this->db->get();
if ($q->num_rows()>0){
foreach ($q->result() as $rows) {
$data[] = $rows;
}
return $data;
}
问题是,当我在我的视图中显示total_store和total_event时,结果是相同的,我认为数字在它们之间相乘。
例如:对于用户,我在4个商店中有3个事件,显示的结果将是total_event = total_store = 12…
我不明白为什么,它让我疯狂了几个小时!!此外,当我只计数一次时,结果是正确的…任何想法?
提前感谢:)
最后我实现了这个基本的SQL查询:
$this->db->query('SELECT
u.*,
x.total_store,
y.total_event
FROM
user u
LEFT OUTER JOIN (SELECT s.store_user_id, COUNT(s.store_user_id) AS total_store
FROM store s
GROUP BY s.store_user_id) x ON x.store_user_id = u.user_id
LEFT OUTER JOIN (SELECT e.event_user_id, COUNT(e.event_user_id) AS total_event
FROM event e
GROUP BY e.event_user_id) y ON y.event_user_id = u.user_id
');
希望对别人有所帮助
count()计算的是行数,而不是结果集中不同值的个数。您是对的,这个数字正在成倍增加:在您的结果集中,每个用户-商店-事件组合都有一行。