首页 > 解决方案 > 如何正确输出连接表?

问题描述

我在'user.ID'='email.ID'上使用了两个带有内部连接的表。

每个用户都有一个名字和一个 ID。每封电子邮件都有一个用户名、电子邮件地址本身和一个相应的用户 ID。用户可以拥有任意数量的电子邮件地址。

通常我使用以下方法打印出我的查询结果:

$row["name"]

我像这样从数据库中选择数据:

SELECT user.name AS name, user.ID as ID, email.user AS user, email.address AS address
FROM user INNER JOIN email ON user.ID=email.ID

然后我显示一个表格并在一行中输出每个用户。

$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
  <table>
  .
  .
  .
  while($row = mysqli_fetch_assoc($result)) {
    <tr>
      <td>$row["ID"]</td>
      <td>$row["Name"]</td>
      <td>$row["Email"]</td>
    </tr>
  }
}

//this snippet is shortened simplified because I use all HTML in php echoes

当我尝试在相应的用户结果行中显示电子邮件地址时,我只是多次让用户在每一行中使用不同的电子邮件地址。

我想要的是:

正确输出表.png

我得到什么:

错误输出表.png

我如何必须选择/加入/分组表和列以及如何正确输出它们?谢谢你的帮助。我已经被困在这里好几天了。

编辑:

output_with_usernames.png

标签: phphtmlsqlmysqli

解决方案


SELECT 
u.name,GROUP_CONCAT(e.email SEPARATOR ',') AS email
FROM users u
JOIN emails e ON e.user_id=u.id

这应该返回:

| User | Email                                           |
-------|-------------------------------------------------|
| Nick | email1@mail.com,email2@mail.com,email3@mail.com |

然后在 PHP 中用逗号分割电子邮件字符串


推荐阅读