2012-03-29 44 views
0
$sql = "select body, stamp from posts where user_id = '$userid' order by stamp desc"; 

注意:上述查询工作正常。我想要做的也是从我的用户表中选择用户名,并显示与user_id匹配的用户名。mysql从两个不同的表中选择。

我编辑了上述语句,所以它不起作用。有人可以建议正确的查询吗?我的目标是也能够显示用户名。除了简单地显示user_id。

$sql = "select body, stamp from posts AND username from users where user_id = '$userid' order by stamp desc"; 

我的目标是也能够显示用户名。而不是简单的user_id。

+0

的可能重复[SQL - 从两个不同的表中选择行(HTTP://计算器.com/questions/532694/sql-select-rows-from-two-different-tables) – Corbin 2012-03-29 20:42:30

+0

JOIN是你正在寻找的。 – Corbin 2012-03-29 20:42:44

+0

您需要外键 – 2012-03-29 20:45:45

回答

4

你需要使用JOIN带来的两个表一起在匹配字段,所以像:

$sql = "SELECT p.body, p.stamp, u.username FROM posts p INNER JOIN users u ON p.user_id=u.user_id WHERE p.user_id='$userid' ORDER BY p.stamp DESC"; 
+0

谢谢你的工作 – arboles 2012-03-29 22:59:08

0
$sql = "select body, stamp from posts , username from users where user_id = '$userid' order by stamp desc"; 

我只是在查询纠正语法错误...这是与关键字应该由,更换。

+1

这将导致笛卡尔积,比预期多得多的行。两个表之间需要一个连接条件,而隐式连接语法(以逗号分隔的表格)是旧的,并计划弃用。 – 2012-03-29 20:42:42

+0

我编辑了答案。 – 2012-03-29 20:43:52

0
select body, stamp, username 
    from posts,users 
    where users.user_id = post.user_id 
     and users.user_id = '$userid' 
    order by stamp desc; 
0

您应该使用别名或表名避免这样的重复问题

tablename.column 

alias.column 

您可以设置别名您的where子句中:

FROM table as alias_name 
0
$sql = "SELECT p.body,p.stamp,u.username from posts p LEFT JOIN users as u ON (p.user_id = u.user_id) WHERE user_id = '$user_id' ORDER BY p.stamp DESC"; 

应该这样做

1

您可以使用表名来选择列。例如:

$Query = "select table1.body, table1.stamp, users.username from posts, users where user_id = '$userid' order by stamp desc"; 

但是,这种方法在性能上并不好。

最好的方法是:

$Query = "SELECT table1.body, table1.stamp, users.username 
FROM posts 
INNER/LEFT/RIGHT JOIN users 
ON users.user_id = '$userid' AND users.user_stamp = stamp.stamp_id 

所有表必须进行相关。

问候,

0

试试这个:

select body, stamp, username 
from posts p JOIN users a ON p.user_id = a.user_id 
WHERE p.user_id = '$userid' order by stamp desc 
0

这应该很好地工作:

SELECT posts.body, posts.stamp, users.username 
FROM posts, users 
WHERE posts.user_id = '$userid' AND posts.user_id = users.user_id 
ORDER BY posts.stamp DESC