0

現在、次のMySQLクエリがあります。

SELECT 
    COUNT(*) AS `count`, 
    `v`.`value` 
FROM `client_entity_int` AS `v` 
INNER JOIN `client_entity` AS `e` 
ON e.id = v.entity_id 
WHERE (v.attribute_id = '1') AND (e.deleted = 0) 
GROUP BY `v`.`value`

これは次を返します:

+-------+-------+
| count | value |
+-------+-------+
|     9 |     0 |
|    11 |     1 |
+-------+-------+

上記のクエリで見つかったすべてのentity_idのコンマ区切りの集計を示す列を含めて、上記を返したいと思います。

これは同じクエリで可能ですか?もしそうなら、どのように?例:

+-------+------------------+
| count | value | entities |
+-------+-------+----------|
|     9 |     0 |  1,2,3,4 |
|    11 |     1 |          |
+-------+-------+----------|
4

3 に答える 3

3

使用する:

  SELECT COUNT(*) 'count', 
         v.value,
         GROUP_CONCAT(DISTINCT v.entity_id ORDER BY v.entityid ASC SEPARATOR ',') 'entities'
    FROM client_entity_int AS v 
    JOIN client_entity AS e ON e.id = v.entity_id 
   WHERE v.attribute_id = '1'
     AND e.deleted = 0
GROUP BY v.value

参照:GROUP_CONCAT

MySQLキーワードにはバッククォートのみを使用する必要があります。

于 2009-12-23T17:18:29.313 に答える
2

group_concat(entity_id SEPARATOR ',') AS entitiesミックスに追加します。

于 2009-12-23T17:00:28.933 に答える
2

Alexが提案したようにgroup_concatを使用します。したがって、クエリは次のようになります

SELECT 
    COUNT(*) AS `count`, 
    `v`.`value`,
    GROUP_CONCAT(entity_id SEPARATOR ',') as entities
FROM `client_entity_int` AS `v` 
INNER JOIN `client_entity` AS `e` 
ON e.id = v.entity_id 
WHERE (v.attribute_id = '1') AND (e.deleted = 0) 
GROUP BY `v`.`value`

これがデフォルトであるため、実際にはSEPARATOR'、'を省略できますが、少なくとも今すぐ変更する方法を知っています:)

于 2009-12-23T17:18:50.943 に答える