mysql join多表查询 count数据增多爬坑记录

日期:2019-01-24 浏览:463次

关键字:distinct

使用mysql提供的distinct这个关键字来过滤重复的记录,distinct只能返回他的目标字段,而无法返回其他字段。

distinct name,id 这样的mysql 会认为要过滤掉name和id两个字段都重复的记录,如果sql这样写:select id,distinct name from user,这样mysql会报错,因为distinct必须放在要查询字段的开头。

本次场景:统计组(1表 random_code_group)信息,组内二维码图(2表 random_code_img )总数,组内二维码所有扫描记录(3表 random_code_record )的扫描总次数。

问题所在:3表中多二维码扫描次数的count,对2表的count造成了影响,使其原值大了许多。

1
2
3
4
5
6
7
8
9
10
$data = Db::name('random_code_group')
    ->alias('r')
    ->join('random_code_img i', 'r.id = i.group_id','LEFT')
    ->join('random_code_record d', 'i.id = d.img_id','LEFT')
    ->field('r.*,count(distinct i.id) img_count,count(d.id) record_count')
    ->where($map)
    ->group('r.id')
    ->order('r.id DESC')
    ->limit(intval($post['start']), intval($post['length']))
    ->select();

未增加distinct 时,3级表数据增多导致二级表count重复,导致值变大,distinct 去掉重复的,数据集就正确了

1 评论

发表评论