首先,我的多对多关系与下表:

+----------+      +--------------+
| users    |      | users_groups |     +--------------+
+----------+      +--------------+     | groups       |
| user_id  |----->| user_id      |     +--------------+
| username |      | group_id     |<----| group_id     |
| realname |      +--------------+     | group_name   |
| password |                           | group_desc   |
+----------+                           +--------------+


现在,我想获取特定组的所有用户的所有现有组的列表/表(不是数据库中的表!),如下所示:

+---------------+--------------------------+
| group         | members                  |
+---------------+--------------------------+
| Group1        | User1, User2, User3      |
| Group2        | User3, User4, User6      |
| Group3        |                          |
+---------------+--------------------------+


我当前的MySQL代码是:

$all_groups = mysqli_query
            ($db,
            "
            SELECT g.group_name,GROUP_CONCAT(DISTINCT u.realname SEPARATOR ', ') AS users
            FROM groups g
            JOIN users_groups ug1 ON g.group_id=ug1.group_id
            JOIN users u ON ug1.user_id=u.user_id
            GROUP BY g.group_name
            "
            );


我当前的PHP代码是:

while($row_all_groups = mysqli_fetch_array($all_groups)) {
    echo '<tr>';
    echo '<td class="td_contentbar">'.$row_all_groups["group_name"].'</td>';
    echo '<td class="td_contentbar">'.$row_all_groups["users"].'</td>';
    echo '</tr>';
}


但是问题是,如果组没有用户(在users_groups-table中),则该组不会显示在我拥有的列表/表中,我也不知道如何解决此问题。

最佳答案

在查询中将JOIN user_groups替换为LEFT JOIN user_groups。

09-12 02:23