如何正确输出联接表?

时间:2018-07-25 15:19:35

标签: php html sql mysqli

我使用两个表,它们在'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

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

我想要什么:

correct_output_table.png

我得到的是

wrong_output_table.png

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

编辑:

output_with_usernames.png

1 个答案:

答案 0 :(得分:1)

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中用逗号分隔电子邮件字符串