[英]Combine multiple rows into one MySQL
我需要協助。 我用谷歌搜索解決方案,但我沒找到一個。
我有三張桌子:
langs
(int) id | (varchar) language
1 | English
2 | Latin
3 | Esperanto
... | ...
keys
(int) id | (varchar) keys
1 | dog
2 | cat
... | ...
value
(int) id | (int) key_id | (int) lang_id | (varchar) value
1 | 1 | 1 | Dog
2 | 1 | 2 | Canis
3 | 2 | 1 | Cat
4 | 2 | 2 | Felis
5 | 2 | 3 | Kato
... | ... | ... | ...
我想得到結果:
key_id | keys | English | Latin | Esperanto
1 | dog | Dog | Canis | NULL
2 | cat | Cat | Felis | Kato
... | ... | ... | ... | ...
合並具有相同key_id
行。 我知道我可以嘗試使用多個JOIN,但它很慢,我必須知道不同langs
的確切數量。
提前致謝。 :)
SELECT CONCAT(
' SELECT `value`.`key_id`,'
, '`keys`.`keys`,'
, GROUP_CONCAT(
'GROUP_CONCAT(IF(`value`.`lang_id`=',id,',`value`.`value`,NULL))'
, ' AS `', REPLACE(language, '`', '``'), '`'
)
, ' FROM `keys` JOIN `value` ON `value`.`key_id` = `keys`.`id`'
, ' GROUP BY `value`.`key_id`'
)
INTO @sql
FROM `langs`;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
您實際上是在查看數據透視表。 它是可行的,雖然代碼有點麻煩。
一個來源: http : //www.artfulsoftware.com/infotree/queries.php#78
最后,雖然大多數mysql解決方案都需要一些帶有存儲過程的魔法,或者......硬編碼你返回的語言。
數據透視表是mysql沒有發光的一個領域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.