1

以下のようなクエリがあります

SELECT s.ip, 
    t.name AS 'typeName', 
    e.name AS 'envName',
    i.name,
    s.computerName
    #ap.name
    #GROUP_CONCAT(DISTINCT i.name ORDER BY i.name ASC SEPARATOR ', ' ) AS instances
    #GROUP_CONCAT(ap.name ORDER BY ap.name ASC SEPARATOR ', ' ) AS AppPool
FROM servers AS s 
JOIN types AS t ON s.typeID = t.id
JOIN environments AS e ON s.envID = e.id
JOIN serverinstances AS si ON s.id = si.serverID
JOIN instances AS i ON si.instanceID = i.id
JOIN serverapppool AS sa ON s.id = sa.serverID
JOIN apppools AS ap ON sa.appPoolID = ap.id
WHERE computerName IS NOT NULL

上記のクエリの結果

|     ip      | type | env | instance | appPool | compName |
|_____________|______|_____|__________|_________|__________|
| 192.168.1.1 |  App | test|   com1   |   fo    |   name1  |
| 192.168.1.1 |  App | test|   com1   |   bo    |   name1  |
| 192.168.1.1 |  App | test|   com2   |   fo    |   name1  |
| 192.168.1.1 |  App | test|   com2   |   bo    |   name1  |
| 192.168.1.2 |  App | test|   com1   |   fo    |   name2  |
| 192.168.1.2 |  App | test|   com1   |   bo    |   name2  |
| 192.168.1.2 |  App | test|   com2   |   fo    |   name2  |
| 192.168.1.2 |  App | test|   com2   |   bo    |   name2  |
| 192.168.1.3 |  App | prod|   com1   |   fo    |   name3  |
| 192.168.1.4 |  App | prod|   com1   |   fo    |   name4  |
| 192.168.1.5 |  App | prod|   com1   |   bo    |   name5  |

これらの結果は正確です。しかし、私はそれらを凝縮する必要があります。目標は、それらを以下のようにすることです

|     ip      | type | env |  instances  | appPools | compName |
|_____________|______|_____|_____________|__________|__________|
| 192.168.1.1 |  App | test| com1, com2  |  fo, bo  |   name1  |
| 192.168.1.2 |  App | test| com1, com2  |  fo, bo  |   name2  |
| 192.168.1.3 |  App | prod|    com1     |    fo    |   name3  |
| 192.168.1.4 |  App | prod|    com1     |    fo    |   name4  |
| 192.168.1.5 |  App | prod|    com1     |    bo    |   name5  |

これは を使用GROUP_CONCATして実行できると思います。最初のクエリでわかるように、さまざまなことを試しました。しかし、必要な結果を製品化することはできません。考え?

4

1 に答える 1

2

GROUPinはあなたGROUP_CONCATにヒントを与えるはずです-あなたは実際にはクエリで何もグループ化していません。たとえば、GROUP BY句はありません。データをグループ化する方法を MySQL に伝えていないため、グループ化を行っていません。したがって、GROUP_CONCAT 呼び出しから単一の値のみを取得します。

おそらく、もっと似たものが欲しいでしょう

SELECT s.ip
etc..
etc..
GROUP BY s.ip  <---this line is missing
于 2013-08-23T21:04:57.890 に答える