繁体   English   中英

MySQL查询-一个表中的单行,另一表中的多行

[英]MySQL query - single row in one table with multiple rows in another table

我有以下数据模型

Table: User
USER ID
USER NAME

Table: Group
GROUP ID
GROUP NAME

Table: User Group
GROUP ID
USER ID

我正在尝试显示包含所有组名和关联用户的屏幕-前端是PHP

我有如下查询-

`SELECT a.group_id,
        a.group_name,
        GROUP_CONCAT(g.user_id) AS user_ids,
        GROUP_CONCAT(u.user_fname) AS user_names
 FROM   group a, user_group g, user u
 WHERE  a.group_id = g.group_id
 AND    g.user_id = u.user_id
 GROUP BY a.group_id`

我的问题:从上述查询中可以看到-我必须有两个表示用户ID和用户名的串联字符串列表。 由于必须这样做,这在PHP中变得令人头疼。1.将两个连接的字符串都分解成数组2.在两个数组中运行循环并从中构造User对象3.然后将对象数组传递给

有没有更有效/更好的方法来做到这一点? 任何建议,指针将不胜感激。

您只想要一张清单吗?

SELECT g.group_id, g.group_name,
       GROUP_CONCAT(g.user_id, ':', u.user_fname) AS names_and_ids
FROM group g join
     user_group ug
     on g.group_id = ug.group_id join
     user u
     on ug.user_id = u.user_id
GROUP BY g.group_id, g.group_name;

请注意以下更改:

  • 我添加了一个group by所以每个分组有一行。
  • 我将别名更改为表名的缩写,因此查询更易于阅读。
  • 我修改了group_concat()以在一个列表中同时包含用户ID和用户名。
  • 我改变了join到使用显式的join语法,而不是隐含在加入where的条款。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM