业务需要做一个待办事件功能,其中主办人是单个,协作人是多个;
然后做了两个表,附表用来存协作人,与主表之间是一对多的关系,
列表显示需要全部数据采用了左连接查询。Left Join 求两个表的交集外加左表剩下的数据。
结果呢,如果协作人是1个的时候没问题,当为多个时,就会出现多条重复数据。
一开始直接采用 group by,这当然可以去重,
不过laravel中封装的count方法 直接取了结果中的第一个数据,
也就是5,实际结果我要的是6,如图:
这样列表显示是没问题,但是计数是不对的。
Laravel中还封装了一个过滤方法
/**
* 强制查询仅返回不同的结果。
*
* @return $this
*/
public function distinct()
{
$columns = func_get_args();
if (count($columns) > 0) {
$this->distinct = is_array($columns[0]) || is_bool($columns[0]) ? $columns[0] : $columns;
} else {
$this->distinct = true;
}
return $this;
}
使用方法:
$total = $conn->distinct('id')->count();
实际上它使用的是Mysql 的 distinct关键字来过滤重复
这样就过滤掉重复的数据了,计数也就准确了。