如何正确输出连接表?

Posted

技术标签:

【中文标题】如何正确输出连接表?【英文标题】:How do I output joined tables correctly? 【发布时间】:2018-07-25 15:19:34 【问题描述】:

我在 '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

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

我想要什么:

我得到了什么:

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

编辑:

output_with_usernames.png

【问题讨论】:

您应该在应用程序中重新排列数据,而不是在数据库中。 如果我们可以看到您代码的相关部分,我们可能会建议修复 向我们展示您用于生成输出的代码。 【参考方案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 中用逗号分割电子邮件字符串

【讨论】:

谢谢!正是我想要的。 是否可以将地址与相应的用户名分组?我在最后编辑下的问题中添加了另一个屏幕截图。 您可以在 PHP 中使用 foreach 循环来遍历电子邮件数组吗? foreach(explode(',',$row["Email"]) as $k=&gt;$v) echo 'Username' .($k+1) . ': ' . $v. '&lt;br&gt;'; 我设法通过这样分组来实现它: GROUP_CONCAT(email.Address SEPARATOR ',') AS Address, GROUP_CONCAT(email.Username SEPARATOR ',') AS Username 将其转换为数组 ike这个:$Address=explode(",", $row["Address"]); $Username=explode(",", $row["Username"]);并像这样打印它: for($i = 0;$i';

以上是关于如何正确输出连接表?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写两个表的正确左连接?

SQL:如何正确连接表?

gorm / go 如何正确连接两个表?

比较与特定字段有关的两个表之间的差异时如何正确连接

如何在 sqlite3 中正确连接这些表 [关闭]

如何正确索引 MySQL 中多对多连接的链接表?