如何使用逗号分隔符作为单行值获取计数值

问题描述 投票:2回答:1

使用以下查询,我得到的结果类似于表中的玩家人数,但现在我还希望哪些玩家位于同一表中,并用逗号分隔符显示这些玩家的ID。

select gt.id,
       bcc.min_coins,
       bcc.max_coins,
       (
          SELECT count(gtp.id)
            FROM game_table_players gtp
                 LEFT JOIN game_rounds gr
                 ON gr.id = gtp.game_round_id
           WHERE gt.id = gtp.game_table_id
             AND gtp.quit<>1 AND gr.finish=0
       ) AS no_of_players,
       IFNULL
       (
           (
               SELECT game_started
                 FROM game_rounds gr
                WHERE gr.game_table_id = gt.id
                  AND gr.finish=0
           ),0
        ) AS game_started
from game_tables gt
     LEFT JOIN pickdeck_category pc
          ON pc.id = gt.pickdeck_category_id
     LEFT JOIN bet_coin_category bcc
          ON bcc.id = gt.bet_coin_category_id
where gt.pickdeck_category_id =1
ORDER BY created_date
LIMIT 0,20

Current result from given query

Expected

mysql
1个回答
3
投票

您要寻找的功能是GROUP_CONCAT。请参阅文档:

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

在您的示例中,您可以再创建一个子查询(以下示例)。或以标准方式将其JOIN转换为原始查询。

...
(
      SELECT GROUP_CONCAT(gtp.id)
          FROM game_table_players gtp
          LEFT JOIN game_rounds gr ON gr.id = gtp.game_round_id
      WHERE gt.id = gtp.game_table_id
          AND gtp.quit<>1 AND gr.finish=0
) AS players,
...

[注意NULL中对GROUP_CONCAT处理的注释。如果要在没有任何玩家在场时显示零,则可以改用COALESCE(GROUP_CONCAT(gtp.id), 0)

© www.soinside.com 2019 - 2024. All rights reserved.