< 返回首页

标哥的笔记,是记录在日常学习技术和日常开发中那些年遇到过的坑!本站为新站,原"标哥的技术博客"中的文章会慢慢移到本站,欢迎收藏本站!
在使用本站过程中,有任何建议请联系标哥! 另,承接App开发、网站开发和微信小程序开发!欢迎联系我们


MySQL按分组把字段值组合成一个结果

 作者:标哥    发布日期:2017-04-18 22:13    阅读量:1818次
 

MySQL如何把多个字段合并成一条记录呢?现在的需求是这样的:购物车中有很多个商品,对应于购物车表,而购物车中的每个商品会有规格,因此也对应一个规格表,而规格表是一对多的关联,即一个商品对应多个规格。现在的问题是,如何在查询sql的时候,将多个规格名称连接起来,用于app端直接显示使用!

举例

CREATE TABLE IF NOT EXISTS `tet` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `url` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

转存表中的数据 `tet`


INSERT INTO `tet` (`id`, `name`, `url`) VALUES
(1, '百度', 'http://www.111cn.net '),
(0, 'google', 'http://www.google.com.hk'),
(3, '400电话', 'http://www.111cn.net ');

需求

将多条记录中的name字段连接起来

实现方式

使用mysql的group_concat函数实现!

SELECT GROUP_CONCAT ( name separator ',' ) name
FROM tet
WHERE 11 = 1
GROUP BY id
LIMIT 0 , 30

这么实现就可以将分组查询结果的name以,连接起来了!

实战中的代码

通过子查询分组查询出每个商品对应的规格:

// 获取所选择的商品的规格
$sub_sql = db('cart_product_value')
    ->alias('cpv')
    ->where('cpv.user_id', $user['id'])
    ->join("property p", 'p.id = cpv.property_id')
    ->join("property_value pv", 'pv.id = cpv.property_value_id')
    ->field("cpv.cart_id, cpv.product_id, group_concat(pv.name separator ',') name")
    ->group('cpv.cart_id')
    ->buildSql();

查询结果:

"cart_id": 10,
"name": "大号,蓝色"

就这样,实现了我们的需求了!

结尾

一直没有太了解这方面的知识,今天遇到这样的需求,真心觉得这个函数太赞了,超级给力!写下本篇文章,方便后面忘记的时候能回来查到!


承接:ThinkPHP项目开发、网站项目开发、微信项目开发、微信小程序项目开发、App开发,欢迎联系标哥QQ632840804