使用以下查询,我得到的结果类似于表中的玩家人数,但现在我还希望哪些玩家位于同一表中,并用逗号分隔符显示这些玩家的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
您要寻找的功能是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)
。