大家好
我正在编写一本留言簿(针对每个用户进行个性化设置)。我有一张用户用的桌子和另一张留言簿用的桌子。现在,我目前显示帖子作者姓名的方式并不理想。我只是在DB中有一行"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";
我想我需要喜欢。。。在不同的条件下但在同一查询中选择名称。但我不知道怎么做。
我希望你能理解我的问题。我们将非常感谢您的帮助!
/Ja傻瓜
假设您的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。
从我所看到的情况来看,由于有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
在留言簿表中对名称进行硬编码确实很脏。假设你的表格结构是这样的:
用户(id,name)gbook(pid、toid、fromid、message、fromname、name、update、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"];
}