关于php:通过ID从其他表中获取帖子作者姓名和类别名称

Get post author name and category name from other table by ID

我有三个 mysql 表,第一个保存有关文章的信息(文章 ID、作者 ID、标题和内容),第二个表保存有关我网站上注册用户的信息(ID、姓名、密码、电子邮件),第三个保存有关类别(ID、名称)。

我需要获取所有文章并显示标题、作者姓名和类别名称,但文章表仅包含有关作者和类别 ID 的信息,而不是名称。

我知道如何从文章表中获取所有文章,但是我应该如何同时从另一个表中获取作者姓名和类别名称以与文章标题一起显示?

希望我说清楚了。

这是我用来显示文章标题的代码:

1
2
3
4
5
6
7
8
9
10
11
$q = mysql_query("SELECT * FROM articles ORDER BY ID DESC");

if(!$q) die(mysql_error());

while($article = mysql_fetch_object($q)) {

echo '';
echo $article->title . '';
echo '<p class="details">Author:' . $article->author_ID . '.</p>';
echo '';
}

正如您猜想的那样,$article->ID 变量显示作者 ID,但我想改为显示名称,该名称保存在作者表中。类别也一样...

有人可以帮忙吗?

提前致谢。


您必须将其他表连接在一起才能获取该信息。有关 SQL 连接的更多信息,请参阅此处。如果您以前没有使用过联接,请四处寻找有关如何在表之间进行简单和复杂联接的更多示例。加入表格后,您要求的所有数据都将可用。


@Tommy 是对的,你必须使用 JOINS,这里有一些东西可以帮助你前进。
假设您的三个表分别称为"文章"、"用户"和"类别":

1
2
3
4
SELECT articles.title, users.name, categories.name FROM articles  
JOIN users ON users.id=articles.author_id  
JOIN categories ON categories.id=articles.category_id  
ORDER BY ID DESC

现在我当然只是在猜测您的表格和字段名称。
在第一行,我调用了像 tablename.field 这样的必填字段
然后我将用户表加入到文章表中,其中用户表中的用户 id 应该等于文章表中的 author_id。
然后类似地,我加入了类别表,指定类别表中的类别 ID 等于文章表中的 category_id。
在此之后,您可以使用 WHERE 子句来进一步缩小选择范围,或者直接进入 ORDER BY,因为您希望将它们全部获取。