2015-02-05 4 views
1

Я новичок, но сообщество было моим лучшим ресурсом в моих проектах. Я тупой/манекен Mysql «хочу быть», и я нахожусь в центре проекта, который заставляет меня сойти с ума.как объединить несколько строк с тем же id mysql

У меня есть таблица из приятеля плагинов wordpress, которая пара 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 

и т.д ....

Используя представление мне удалось создать более удобный для поиска стол для начинающих:


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 

Дело в том, что я необходимо объединить этот результат (вид), так что все 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 

т.д.

Может ли кто-нибудь мне помочь?

+0

Это похоже на это http://stackoverflow.com/questions/16568228/how-to-transpose-mysql-table-rows-into-columns, но я думаю, что вы можете добавить в конце вашего взгляда «GROUP BY gid» может быть? –

+0

Я пробовал и получил строку без данных, кроме столбца gid –

ответ

1

Просто окружают ваши 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 
+0

Спасибо, я попробую сразу же, я попробовал группу по id, но не по максимуму. :) –

+0

Работал как шарм, я такой тупой! Большое спасибо! –