大家好!
我正在为留言簿编写脚本(针对每个用户进行个性化)。我有一个用户表和另一个用于留言簿。现在,我正在显示帖子作者姓名的方式并不是最佳的。我只是在数据库中有一行“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
答案 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)
从我看到的内容看起来您需要链接到用户表两次,因为您有fromid
和toid
。如果您有用户表,为什么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"];
}