【问题标题】:Mysql inner join/ multiple selects in one query?一个查询中的Mysql内部连接/多项选择?
【发布时间】:2013-12-16 13:22:15
【问题描述】:

大家好!

我正在编写留言簿(针对每个用户进行个性化设置)。我为用户准备了一张桌子,为留言簿准备了一张不同的桌子。现在,我当前显示帖子作者姓名的方式并不是最佳的。我只是在数据库中有一行用于“fromname”,即作者姓名。 我想根据作者 ID 选择作者姓名,并将其与“用户”表中的姓名相匹配。

所以...这是我现在的 mysql 查询:

$sql = " SELECT 
             pid,toid,fromid,message,fromname,name,pdate,flag 
         FROM gbook INNER JOIN users 
         ON id='{$_GET['id']}' 
         WHERE toid='{$_GET['id']}' 
         ORDER BY pdate DESC";

我想我需要喜欢... 在不同的条件下但在同一个查询中选择名称。但我不知道怎么做。

我希望你能理解我的问题。 非常感谢您的帮助!

/贾富尔

【问题讨论】:

  • 你能告诉我们你的表结构吗?

标签: php mysql sql


【解决方案1】:

从我所见,您似乎需要链接到用户表两次,因为您有一个 fromid 和一个 toid。如果您有一个 users 表,为什么在 gbook 表中有一个 fromname 字段?无论如何,如果我的假设是正确的,那么您可能会对以下查询感兴趣:

SELECT g.*, u1.username AS ToUser, u2.username AS FromUser
  FROM gbook AS g
  INNER JOIN users AS u1 ON u1.id = g.toid
  INNER JOIN users AS u2 ON u2.id = g.fromid
WHERE g.toid = '{$_GET['id']}' 
ORDER BY g.pdate DESC

【讨论】:

  • 感谢您的帮助! :)
【解决方案2】:

在留言簿表中硬编码姓名确实很脏。假设你的表结构是这样的:

用户(ID,姓名) gbook(pid, toid, fromid, message, fromname, name, pdate, flag)

您的查询已经差不多了。只需将其更改如下以选择两个表的所有列:

$sql = " SELECT *
         FROM gbook g INNER JOIN users u
         ON u.id=g.fromid 
         WHERE toid='{$_GET['id']}' 
         ORDER BY pdate DESC";

然后你可以用类似的东西显示名字

$result = mysql_query($sql);
while( $val = mysql_fetch_array($result) )
{ 
  $username = $val["u.name"];
}

【讨论】:

  • 感谢您的帮助! :)
【解决方案3】:

假设您的 users 表有一个名为 username 的列,以下应该可以满足您的要求:

SELECT 
    pid,
    toid,
    fromid,
    message,
    u.username, 
    name,
    pdate,
    flag 
FROM gbook INNER JOIN users u
  ON id='{$_GET['id']}' 
WHERE toid='{$_GET['id']}' 
ORDER BY pdate DESC"

我所做的只是为用户表(作为 u)设置别名,并引用 u.username 而不是您之前的 fromname。

【讨论】:

  • 好的,谢谢您的回答!所以我做到了这一点:$sql = "SELECT pid,toid,fromid,message,fromname,u.name,pdate,flag FROM gbook INNER JOIN users u ON id='{$_GET['id']}' WHERE toid='{$_GET['id']}' ORDER BY pdate DESC"; 当我像这样回显它时:echo "{$row['fromname']} | {$row['u.name']}"; “fromname”有效,但我得到“注意:未定义索引:u.name in D:\xampp\htdocs\fbook\gb .php 在第 129 行",而 u.name 没有。
  • 当你在 PHP 中引用它时,你不会使用 u.字首。尝试使用:$row['name']
  • 我认为问题解决了!与大家分享,这是最终结果:$sql = "SELECT pid, toid, fromid, message, fromname, u.name, pdate, flag FROM gbook INNER JOIN users u ON u.id=fromid WHERE toid='{$_GET['id']}' ORDER BY pdate DESC"; 并且我所需要的只是回应它,例如:echo "From: {$row['name']}"; 我要感谢每个发布答案的人,因为他们都提供了帮助不同的方式。希望这个修复不会搞砸其他事情,哈哈。再次感谢你! /贾富尔
猜你喜欢
  • 2020-10-25
  • 2023-03-24
  • 2011-12-13
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多