[英]MySQL join multiple rows of query into one column
client_commands (“主”表):
id | completed
command_countries :
id | command_id | country_code
command_os :
id | command_id |OS
on的command_id引用client_commands的id列。
我可以添加帶有基於國家和操作系統的過濾器的客戶端命令。 要嘗試規范我的數據庫結構,請為每個添加的新命令:
對於我網站上的頁面之一,我需要顯示所有client_commands(已完成= 0)以及該命令的所有國家和操作系統。 我想要的輸出將是這樣的:
id | countries | OS
1 | GB, US, FR| 2, 3
2 | ES, HU | 1, 3
我不確定該怎么做。 我正在使用的當前查詢返回多行:
SELECT a.id, b.country_code, c.OS
FROM client_commands a
LEFT JOIN command_countries b on b.command_id = a.id
LEFT JOIN command_os c on c.command_id = a.id
WHERE a.completed = 0
有什么幫助嗎?
謝謝!
編輯:我忘了提(如果您不能從上面推斷)-每個命令可以有不同數量的操作系統和國家/地區。
-
另外:我知道我可以通過拉出所有命令,然后遍歷並為每個結果運行2個附加查詢來做到這一點。 但是,如果可以的話,我想通過一個查詢來盡可能有效地做到這一點。
您可以使用GROUP_CONCAT
在一個查詢中執行此操作
SELECT a.id,
GROUP_CONCAT(DISTINCT b.country_code SEPARATOR ' ,') `countries`,
GROUP_CONCAT(DISTINCT c.OS SEPARATOR ' ,') `os`,
FROM client_commands a
LEFT JOIN command_countries b on b.command_id = a.id
LEFT JOIN command_os c on c.command_id = a.id
WHERE a.completed = 0
GROUP BY a.id
如果要連續顯示有序結果,可以在GROUP_CONCAT
使用ORDER BY,例如
GROUP_CONCAT(b.country_code ORDER BY b.command_id DESC SEPARATOR ' ,') `countries`
但是請注意,事實上默認情況下,concat最多可設置1024個字符,但是可以增加b, 手冊中提供的步驟
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.