0

可能重复:
跨两个表的 SQL SELECT

我想用php和mysql建立一个小论坛。我有两张桌子:

论坛帖子:id(Primary_Key),user_id(Foreign_Key),文本

用户:id(Primary_key),用户名

现在我想列出所有论坛帖子以及我想显示作者的每个帖子。

我的尝试:

$mySQL_getPosts = mysql_query('SELECT * FROM forum_posts ORDER BY id ASC');

这当然给了我所有的帖子。但是如何与我的用户表建立连接?

最后,我想显示这样的帖子:

Username wrote: | Here goes the text from forum_posts 
4

5 回答 5

2

您需要做的是在 2 个表之间进行连接。在你的情况下,它会是这样的:

SELECT f.text, u.username FROM forum_posts f JOIN user u ON (f.user_id = u.id)

了解有关 SQL 的更多信息,尤其是联接。有许多类型的连接,你会偶然发现其中的一些。如果您尝试在 PHP + MySQL 中构建类似论坛的网站,您将编写的大多数查询将包含至少 1 个连接。

于 2012-04-12T18:27:52.010 回答
1

这是一个选项:

SELECT FP.id,U.Username
FROM forum_posts FP, users U 
WHERE FP.user_id = U.id ORDER BY id ASC

我错过了什么吗?

但加入更好

在 MySQL 查询中,为什么使用 join 而不是 where?

于 2012-04-12T18:26:40.823 回答
1

这就是 JOIN 命令派上用场的地方。即使没有关联用户,LEFT JOIN 也会从 forum_posts 获取记录。如果这不能发生,或者如果您不想发布匿名帖子,请删除 LEFT 部分。

SELECT f.*, u.username FROM forum_posts AS f LEFT JOIN user AS u ON f.id = u.id ORDER BY id ASC

于 2012-04-12T18:30:19.770 回答
1

您可以使用基本的内部连接将两个表链接在一起,如下所示:

SELECT username, text 
FROM forum_posts 
INNER JOIN user ON forum_posts.user_id = user.id 
ORDER BY id ASC

注意: 最好只从表中选择所需的列而不是所有列。

于 2012-04-12T18:34:13.267 回答
1

为了给出两个表之间的关系,你必须使用 mysql 连接。

forum_posts : id(Primary_Key),user_id(Foreign_Key),text[主表]

user : id(Primary_key), username[通过主表id连接这个表]

$sql_query_string = "Select fp.* from forum_posts as fp
>                      left join user as u on (u.id = fp.user_id)
>                      order by fp.id asc";
> 
> $result = mysql_query($sql_query_string);
> 
> While($data = mysql_fetch_row($result)){
>     echo "<pre>";print_r($result);"</pre>"; }

此查询将有助于您显示作者

于 2012-04-12T18:38:19.043 回答