php - mysql 如何合并具有相同 id 的多行

标签 php mysql wordpress buddypress

我是新来的,但到目前为止,社区是我项目中最好的资源。 我是一个“想成为”的愚蠢/虚拟的 Mysql,而我正处于一个让我发疯的项目之中。

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

--------------------------------------------
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

等等......

使用 View ,我设法为初学者创建了一个更友好的可搜索表:


gid| time-zone| playstyle  | main-raid
--------------------------------------------
1  |          |            | 
1  |Kwajalein |            | 
1  |          | hardcore   | 
1  |          |            | 
1  |          |            | Final Coil of Bahamut
1  |          |            | 

这是查看代码:

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

重点是,我需要合并该结果( View ),以便所有 group_id=1 或 2 或 3 等位于一行中,如下所示:


gid| time-zone| playstyle  | main-raid
--------------------------------------------
1  |Kwajalein | hardcore   | Final Coil of Bahamut
2  |SaoPaulo  | regular    | Second Coil of Bahamut

等等

有人可以帮我吗?

最佳答案

只需将 IF 放在 MAX 中,或另一个将捕获非空字符串的聚合函数(例如 GROUP_CONCAT) ,并在末尾添加一个GROUP BY group_id。例如,

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

关于php - mysql 如何合并具有相同 id 的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28352949/

相关文章:

php - Laravel 错误 '; expected' 和 'Unexpected Unknown' 437 次

php - 无法注销mysql和php

php - Codeigniter session 数据库

mysql - 如何优化大型mysql表(股票数据)

php - android php mysql从应用程序到数据库数据库插入多行

php - 安装SSL证书后,WordPress网站仍然不安全。如何更新Google字体网址

wordpress - 如何在 Wordpress 中编辑一个类?

php - navbar-brand 中的 Laravel 动态页面标题

php - 从 MySQL PHP 创建逗号分隔列表

wordpress - Woocommerce 循环标题位置