数据来自2张表,在之前的帖子里已经写了这获取数据后如何拆分数据
$data = Db::table('hi_project_combo')->alias('A')
->leftJoin('hi_project B','B.id=A.pid')
->field('B.id,max(B.group_name) group_name,max(B.class_name) class_name,max(B.type) type,max(B.sort) sort,max(B.tags) tags,max(B.is_show) is_show,max(B.summary) summary')
->field("GROUP_CONCAT(
concat_ws('#',
CONCAT('id=>',A.id),
CONCAT('pid=>',A.pid),
CONCAT('title=>',A.title),
CONCAT('simple_title=>',A.simple_title),
CONCAT('original_price=>',A.original_price),
CONCAT('group_price=>',A.group_price),
CONCAT('price=>',A.price),
CONCAT('num=>',A.num),
CONCAT('days=>',A.days),
CONCAT('unit=>',A.unit)
) separator'|') AS group_combo")
->group('B.id')
->select();
按照上面这个写完实际使用中发现,后添加的数据或者价格低的没有按照我预期的升序排列,以为添加个->order('A.price','ASC')可以升序排列,但是order和group同时出现是没有效果的,包括也尝试了利用子查询,在我这个里面也是没有效果的。
(上面这样不是想要的效果)
试了好多方法后,后来查找资料,发现最简单的做法是在group_concat()函数内排序可以,如下有效。
$data = Db::table('hi_project_combo')->alias('A')
->leftJoin('hi_project B','B.id=A.pid')
->field('B.id,max(B.group_name) group_name,max(B.class_name) class_name,max(B.type) type,max(B.sort) sort,max(B.tags) tags,max(B.is_show) is_show,max(B.summary) summary')
->field("GROUP_CONCAT(
concat_ws('#',
CONCAT('id=>',A.id),
CONCAT('pid=>',A.pid),
CONCAT('title=>',A.title),
CONCAT('simple_title=>',A.simple_title),
CONCAT('original_price=>',A.original_price),
CONCAT('group_price=>',A.group_price),
CONCAT('price=>',A.price),
CONCAT('num=>',A.num),
CONCAT('days=>',A.days),
CONCAT('unit=>',A.unit)
) ORDER BY A.price ASC separator'|') AS group_combo")
->group('B.id')
->select();
( 这才是正常想要的效果)