DB::table('follow_ups') ->select( 'created_at as start', DB::raw('count(*) as title') )->groupBy('created_at')->get()->toArray();
上面的查询以整数形式返回标题,我希望以字符串形式返回此值
mi7gmzs61#
Count(*)是一个聚合函数,它将对组中不同的标题进行计数。如果您想获取所有标题,则需要一个不同的聚合函数,该函数可以(以某种方式)返回组中的所有成员。有一个选项通常是可用的(即,即使在较旧的MySQL版本中也是如此):
组连接(_C)
DB::table('follow_ups') ->select( 'created_at as start', DB::raw('GROUP_CONCAT(title) as title') )->groupBy('created_at')->get()->toArray();
这将返回通过您指定的分隔符连接的所有组成员(如果未指定,则默认为,)
,
较新的MySQL版本也有JSON_ARRAYAGG
DB::table('follow_ups') ->select( 'created_at as start', DB::raw('JSON_ARRAYAGG(title) as title') )->groupBy('created_at')->get()->toArray();
这将以json数组的形式返回结果,然后可以使用json_decode($row['title'],true)对其进行解码
json_decode($row['title'],true)
第二种方法的优点是,在组成员包含分隔符的情况下,更容易获得组的各个值,例如,有一些标题包含逗号,因此GROUP_CONCAT有点无用。
注意:据我所知,这两个函数都是特定于MySQL/MariaDB的,因此,如果您计划使数据库可移植,您可能希望避免使用它们,并寻找与ANSI SQL兼容的替代函数。
1条答案
按热度按时间mi7gmzs61#
Count(*)是一个聚合函数,它将对组中不同的标题进行计数。如果您想获取所有标题,则需要一个不同的聚合函数,该函数可以(以某种方式)返回组中的所有成员。有一个选项通常是可用的(即,即使在较旧的MySQL版本中也是如此):
组连接(_C)
这将返回通过您指定的分隔符连接的所有组成员(如果未指定,则默认为
,
)较新的MySQL版本也有JSON_ARRAYAGG
这将以json数组的形式返回结果,然后可以使用
json_decode($row['title'],true)
对其进行解码第二种方法的优点是,在组成员包含分隔符的情况下,更容易获得组的各个值,例如,有一些标题包含逗号,因此GROUP_CONCAT有点无用。
注意:据我所知,这两个函数都是特定于MySQL/MariaDB的,因此,如果您计划使数据库可移植,您可能希望避免使用它们,并寻找与ANSI SQL兼容的替代函数。