【问题标题】:SQL ERROR When i join 2 tablesSQL 错误当我加入 2 个表时
【发布时间】:2011-09-23 12:01:05
【问题描述】:

对不起,让我修改一下。我有三张桌子:

事件_年
• 事件ID
• 年号
• 身份证

日期
• 年号
• 年份

活动
• 事件ID
• 事件名称
• 事件类型

我想从三个表中显示一条记录,如下所示:

赛事名称 - 年份:马拉松 - 2008

我将它链接到一个名为“members”的表,其中包含一个 ID 号字段 (members-id)

所以我可以将结果限制为成员 id = $un(这是会话中的用户名)

我需要将三个表连接起来,并将结果限制在特定的ID号记录

这是我的部分代码:

$query =    "SELECT * FROM members JOIN events_year ON members.id = events_year.id ";
            "SELECT * FROM Event JOIN events_year ON Event.EventID = events_year.EventID WHERE username = '$un'";
            "SELECT * FROM Date JOIN events_year ON Date.YearID = events_year.YearID WHERE username = '$un'";


$results = mysql_query($query)
    or die(mysql_error());

    while ($row = mysql_fetch_array($results)) {
    echo $row['Year'];
    echo " - ";
    echo $row['Event'];
    echo "<br>";
    }       

【问题讨论】:

  • 表定义是什么?
  • 你自己做了什么调试?您是否尝试打印/记录$row 的内容?
  • 你不能像那样运行三个选择查询
  • 任何帮助将不胜感激
  • 你为什么用“SQL 错误”来命名它?没有 SQL 错误。

标签: php mysql sql database join


【解决方案1】:

这些通知几乎是不言自明的。结果集中没有 'Year''EventName' 字段。很难(或:不可能)说出为什么会发生这种情况,因为您没有给出表结构,但我猜是:'Year'date-table 的一个字段,'EventName'event-table - 你只是从 members 中选择,所以这个字段不会出现。

我不明白为什么有三个 sql 语句,但只有一个分配给一个变量——另外两个只是站在那里什么都不做。请对此进行解释,并在您的问题中添加更多信息,例如您想要达到的目标、您的表结构是什么样的以及您的预期结果是什么。

我认为您真正想做的是某种联合查询,因此请查看the documentation 以了解其工作原理。

最后,我认为您的查询应该如下所示:

SELECT
  *
FROM
  members
INNER JOIN
  events_year ON members.id = events_year.id
INNER JOIN
  Event ON Event.EventID = events_year.EventID
INNER JOIN
  ´Date´ ON ´Date´.YearID = events_year.YearID
WHERE
  members.username = '$un'

【讨论】:

  • 我很惊讶你可以有一个名为“日期”的表,我认为这是 MySQL 中的保留字。
  • 编辑:哦,看来你可以。直到。虽然,我不建议将其作为一个好的做法。
【解决方案2】:

查询输出中是否存在“年份”字段?我怀疑不是。

【讨论】:

  • 另外你在标题中说你正在加入表格。您也许应该对此进行一些研究,因为“加入”可能不是您认为的那样。 sql 语句中的“join”关键字很重要。
【解决方案3】:

字符串 $query 仅使用第一行文本:

    "SELECT * FROM members JOIN events_year ON members.id = events_year.id ";

而不是其他人。

查询本身没有返回任何名为 Year 或 EventName 的字段。

执行 var_dump($row) 以找出返回的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多