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