Mysql内连接/多个选择在一个查询?

时间:2013-11-30 14:02:44

标签: php mysql sql

大家好!

我正在为留言簿编写脚本(针对每个用户进行个性化)。我有一个用户表和另一个用于留言簿。现在,我正在显示帖子作者姓名的方式并不是最佳的。我只是在数据库中有一行“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";

我想我需要...在不同条件但在同一查询中选择名称。但我不知道如何。

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

/ Jafool​​

3 个答案:

答案 0 :(得分:1)

假设您的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.username而不是之前的fromname。

答案 1 :(得分:1)

从我看到的内容看起来您需要链接到用户表两次,因为您有fromidtoid。如果您有用户表,为什么fromname表中会有gbook字段?无论如何,如果我的假设是正确的,那么您可能对以下查询感兴趣:

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 :(得分:0)

对留言簿表中的名称进行硬编码确实很脏。假设您的表结构是这样的:

用户(id,name) 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"];
}