最近做一个项目,遇到一个在分组的情况下,将某一列的字段值(varchar类型)连接起来的问题,类似于sum函数对int型字段值求和。如有一个表t_table,结构和数据如图1
其中要按着xh字段分组,并且将每一组name字段值连接起来。最终结果希望如图2所示
表中的th字段值对于每一个xh值是唯一的,也是有限的,也就是说,对于一个xh值,th的值不会太多,如最多是10个(从1至10)。
以上需求最终想了三种方法来解决这个问题。
一、修改表结构
如果是新的项目,可以考虑修改一下表的结构。如果t_table的结构修改如下:
|
这种方法将value的值纵向改为横向,也就是说,按每一个xh值,将value字段的值按逆时针旋转了90度。 但这种方法要有一个前提,就是假设xh的每一个值所对应的value值不会太多,如上面不超过10个,这样才有可能建立有限个字段。如果按着上面的字段结构,只需要将这些字段加一起就可以了,也不用分组。如下所示:
|
但这种方法至少有如下三个缺陷:
1. 需要修改表结构,这对于已经进行很长时间或是已经上线的项目产不适用
2. 对每一个xh字段的value取值数有限制,如果太多,就得建立很多字段。这样性能会降低。
3. 这样做虽然查询容易,但如果需要对每一个xh的不同值频繁修改或加入新的值时,如果把它们都放到一行,容易因为行锁而降低性能。
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交