首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多行合并到同一个id mysql

如何将多行合并到同一个id mysql
EN

Stack Overflow用户
提问于 2015-02-05 20:00:06
回答 1查看 905关注 0票数 2

我是新来这里张贴,但社区一直是我最好的资源,我的项目到目前为止。我是一个哑巴/傀儡Mysql“想要成为”,我正处于一个让我发疯的项目中。

我有一个来自wordpress插件buddypress的表,它将meta_key和meta_values配对,以创建类似于分类法的东西。我的职责是使用这些配对值来实现高级组搜索。这是原来的桌子:

代码语言:javascript
复制
--------------------------------------------
id | group_id | meta_key           | meta_value
--------------------------------------------
1  | 1        | time-zone          | Kwajalein
2  | 1        | playstyle          | hardcore
3  | 1        | recruiting-status  | Open
4  | 1        | ilvl               | 115
5  | 1        | main-raid          | Final Coil of Bahamut
6  | 1        | voicechat          | fc.teamspeak3.com

等等..。

使用视图,我设法为乞丐创建了一个更友好的搜索表:

代码语言:javascript
复制
gid| time-zone| playstyle  | main-raid
--------------------------------------------
1  |          |            | 
1  |Kwajalein |            | 
1  |          | hardcore   | 
1  |          |            | 
1  |          |            | Final Coil of Bahamut
1  |          |            | 

以下是视图代码:

代码语言:javascript
复制
SELECT distinct
group_id AS 'gid',
IF(meta_key='recruiting-status',meta_value,'') AS 'Recruitment',
IF(meta_key='server',meta_value,'') AS 'server',
IF(meta_key='time-zone',meta_value,'') AS 'tzone',
IF(meta_key='main-raid',meta_value,'') AS 'raid',
IF(meta_key='raid-days',meta_value,'') AS 'days',
IF(meta_key='playstyle',meta_value,'') AS 'playstyle',
IF(meta_key='raid-progression',meta_value,'') AS 'progression',
IF(meta_key='raid-time',meta_value,'') AS 'time',
IF(meta_key='tanker-spot',meta_value,'') AS 'tank',
IF(meta_key='healer-spot',meta_value,'') AS 'healer',
IF(meta_key='melee-dps-spot',meta_value,'') AS 'melee',
IF(meta_key='ranged-dps-spot',meta_value,'') AS 'ranged',
IF(meta_key='magic-dps-spot',meta_value,'') AS 'magic',
IF(meta_key='ilvl',meta_value,'') AS 'ilvl',
IF(meta_key='voicechat',meta_value,'') AS 'voice',
IF(meta_key='voicechatpass',meta_value,'') AS 'voicep',
FROM wpstatic_bp_groups_groupmeta

重点是,我需要合并结果(视图),以便所有的group_id=1或2或3等都站在一排,如下所示:

代码语言:javascript
复制
gid| time-zone| playstyle  | main-raid
--------------------------------------------
1  |Kwajalein | hardcore   | Final Coil of Bahamut
2  |SaoPaulo  | regular    | Second Coil of Bahamut

有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-05 21:30:21

只需将IF包围在一个MAX中,或者将捕获非空字符串(例如GROUP_CONCAT)的另一个聚合函数中,然后添加一个GROUP BY group_id添加结束。例如,

代码语言:javascript
复制
SELECT
group_id AS gid,
MAX(IF(meta_key='recruiting-status',meta_value,'')) AS 'Recruitment',
MAX(IF(meta_key='server',meta_value,'')) AS 'server',
...
FROM wpstatic_bp_groups_groupmeta
GROUP BY group_id
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28352949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档