【问题标题】:MySQL multiple joins on the same table selects only 1 row in while loopMySQL 在同一个表上的多个连接在 while 循环中只选择 1 行
【发布时间】:2013-02-28 08:30:13
【问题描述】:

表“posts”包含在每篇文章中发布 cmets 的人的文章和最后 3 个用户 ID(us1、us2、us3)。我需要加入“usertable”以获取最后评论海报的名称。这是我的查询:

$result = mysql_query("SELECT m.id, m.comment, m.us1, m.us2, m.us3,p.name,o.name,t.name,
FROM posts m 
LEFT JOIN usertable p ON m.us1=u.id
LEFT JOIN usertable o ON m.us2=u.id
LEFT JOIN usertable t ON m.us3=u.id   

where m.lid = '$pid' order by m.id desc limit 0,20")  or die('Error');

while(list($id, $comment, $us1, $us2, $us3, $name1, $name2, $name3) = mysql_fetch_row($result)) {
echo "$id<br />";
}

不幸的是,这个结果的“回声”是:

79
79
79
79
79...

“79”是“posts”表中最后一行的ID。那么,为什么这个查询的结果只有从“posts”中选出的一行呢?

【问题讨论】:

  • 这个表别名“u”是什么(m.us1=u.id, m.us2=u.id, m.us3=u.id)?

标签: php mysql left-join


【解决方案1】:

当此图中没有表“U”时,您的 SQL 引用“u.id”存在问题。试试:

SELECT m.id, m.comment, m.us1, m.us2, m.us3, p.name, o.name, t.name
FROM posts m 
LEFT JOIN usertable p ON m.us1=p.id
LEFT JOIN usertable o ON m.us2=o.id
LEFT JOIN usertable t ON m.us3=t.id

此外,请切换到 mysqli_* 函数而不是 mysql_,因为 mysql 扩展已被弃用并且很快将被删除。 PDO 也值得一看。在 php.net 上检查这两个。

【讨论】:

  • 不,您可能只是盯着它看太久了。这就是堆栈交换的意义所在,一组新的眼睛。
猜你喜欢
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2017-10-15
  • 2012-06-28
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多