簡體   English   中英

將多行合並為一個MySQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM