2011-07-20 43 views
1

我的任務是創建一個.sql批處理文件來查詢包含用戶/服務器/組信息的MySQL數據庫(版本:4.1.13-標準),例如。mysql數據轉儲格式化

USER1 server1的組1,組2

USER1 server2的組1,組3

USER1服務器3組5

USER2服務器2組2

USER2服務器5組2

用戶3服務器4 GROUP4

tr ick是,輸出文件必須以這樣的方式格式化,即每個用戶只有一行,並將所有服務器和組信息組合在一起。所以,上面的例子看起來像:

「用戶1」,「服務器1:1組,第2組;服務器2:1組,第3組; server1的:組5」

「用戶2」,「服務器2:第2組;服務器5:組2」

「用戶3」,「服務器4:GROUP4」

我道歉,如果這或類似的問題已經回答過了。我保證我花了數小時尋找解決方案,但沒有找到一個解決方案。或者當我看到它時我沒有意識到。通過交易,我不是任何想象力的DBA,而且我對MySQL的瞭解還不足以解決這個問題。

到目前爲止,我已經得到最接近的是使用:

select concat(name,',',group_concat(concat(trim(hostname),':',replace(trim(groups),',','-'))separator ';')) 

感謝您願意提供任何幫助。

回答

0

我嘗試了一下我的一個數據庫,我得到的結果與您的預期結果非常相似,因爲我沒有像您的結構化數據庫。

嘗試

SELECT CONCAT(
    t.name, ',', GROUP_CONCAT(
     DISTINCT CONCAT(TRIM(t.hostname),':', REPLACE(TRIM(t.groups),',','-')) 
    SEPARATOR ';') 
) FROM table_name t GROUP BY t.name 

我猜,DISTINCT和GROUP BY t.name可能是魔法的話;)

+0

klausinho,GROUP BY絕對是魔法的話!而DISTINCT可能也不會傷害。非常感謝您的幫助。 –

+0

尤利歡迎!我從這個社區得到了很多解決方案和很好的想法,我很幸運能稍微付錢 – klausinho