【问题标题】:Complicated SQL Structural Relationship outputting to HTML Table复杂的 SQL 结构关系输出到 HTML 表
【发布时间】:2015-03-21 19:05:04
【问题描述】:

我需要一些帮助来编写多对多数据库关系的 sql select 语句。

我在mysql中有table1、table2、table3,想用html输出底部的表。但是,关系结构让我感到困惑。你能帮我在正确的表格单元格中输出正确的兴趣吗?目前,我的 sql select 和 fetch 语句为每个用户生成一个包含多行的表,每个用户都有一个兴趣。

我已经尝试了所有我知道的连接和数组来正确输出。你能解释一下我做错了什么吗?我当前的代码如下所示:

$query = "SELECT *, table2.interest FROM table1
JOIN table3 ON table3.table1id = table1.id
JOIN table2 ON table3.table2id = table2.id
WHERE year=2017";

//Execute query
$qry_result = mysql_query($query) or die(mysql_error());

//Build Result String
$display_string = "<table border='1px'><tr><th>id</th><th>name</th>         <th>string</th><th>year</th><th>interest</th></tr>";
$display_string .= "<tr><td>$row[id]</td><td>$row[name]</td> <td>$row[string]</td><td>$row[year]</td><td>$row[interests] </td></tr>  </table>";

echo $display_string;

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。请注意,表 3 中的id 似乎是多余的。
  • 你好像在找GROUP_CONCAT
  • 我不会为此使用 GROUP_CONCAT。一个循环就足够了。
  • 我可能会在 php 中进行演示;只需获取所有行,按用户排序,然后在循环遍历它们时对它们进行分组。这样也可以轻松更改演示文稿(例如添加兴趣链接)。

标签: php html mysql sql


【解决方案1】:

您的示例输出不仅仅适用于 2017 年,因此请删除 where。然后做一个group by:

SELECT t1.*, GROUP_CONCAT(t2.interest SEPARATOR ', ') as interests
FROM table1 t1 JOIN
     table3 t3
     ON t3.table1id = t1.id JOIN
     table2 t2
     ON t3.table2id = t2.id
GROUP BY t1.id;

【讨论】:

  • 我不知道 group_concat。谢谢
  • Gordon,这似乎可行,但只会产生第一个结果,而不是所有需要的结果。有任何想法吗?到目前为止,谢谢。
  • @Ryanf 。 . .这应该产生四行(对于问题中的数据)。您可能会错过group by 吗?
  • @GordonLinoff 它仅按代码生成第 4 行。我已经通过多种方式对其进行了更改,包括添加 HAVING 语句,但似乎仍然只能得到 1 个结果。
  • @Ryanf 。 . .你能设置一个 SQL Fiddle 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
相关资源
最近更新 更多