thinkphp中使用group_concat()函数时的排序方法

数据来自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();

( 这才是正常想要的效果)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GROUP_CONCAT函数MySQL的一个聚合函数,用于将多行数据按照指定的分隔符连接成一个字符串。在TP框架,可以使用Db类的query方法来执行原生的SQL语句,从而使用GROUP_CONCAT函数。 例如,你可以使用以下代码来使用GROUP_CONCAT函数: ```php $data = Db::query("SELECT t.measure_id, t.link_name, GROUP_CONCAT(t.range_time SEPARATOR ',') AS range_time FROM tb_assessment_criteria t GROUP BY t.measure_id"); ``` 这个例子,我们使用了原生的SQL语句来执行查询操作,将结果存储在$data变量。在SELECT语句,我们使用GROUP_CONCAT函数将t.range_time字段按照逗号分隔符连接成一个字符串,并起了一个别名range_time。然后,我们使用GROUP BY子句将结果按照t.measure_id进行分组。 希望这个例子能够帮助你理解如何在TP框架使用GROUP_CONCAT函数。如果你有任何其他问题,请随提问。 #### 引用[.reference_title] - *1* *3* [thinkphp使用group_concat()函数排序方法](https://blog.csdn.net/weixin_44585369/article/details/122945639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [认识group_concat](https://blog.csdn.net/m0_52796363/article/details/120831087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值