我有两个数据库表我正在努力合作。它们被称为用户和forun_topics
在forum_topics中,我有一个名为topic_creator的列。这将始终是一个整数。
在用户中,我有一个名为id的列。
users表中的id是topic_creator整数。
所以我想要完成的是将topic_creator与users表中的id相关联,然后使用它找到我在users表中名为username的另一列。
所以为了使这个变得非常简单,我试图从发帖的人那里输出用户名。
截至目前,这是我的查询,我显示了topic_creator,我可以弄清楚如何在SQL工作后输出所有内容,但我无法弄清楚如何将另一个数据库表添加到此查询中然后找到用户名字段。我遇到的最大问题是如何获取用户名字段。
$query2 = mysqli_query($con,"SELECT t.*, c.id AS cid FROM forum_topics AS t, forum_categories AS c ORDER BY topic_reply_date DESC LIMIT 3")
我该怎么做?
更新以显示更多代码
$query2 = mysqli_query($con,"SELECT t.*, c.id AS cid
FROM forum_topics AS t
INNER JOIN forum_categories AS c
on t.categories.ID = c.ID
INNER JOIN users u
on u.id = t.topic_creator
ORDER BY topic_reply_date DESC LIMIT 3")
or die ("Query2 failed: %s\n".($query2->error));
$numrows2 = mysqli_num_rows($query2);
if($numrows2 > 0){
$topics .= "<table class='top_posts_table'>";
//Change link once discussion page is made
$topics .= "<tr><th class='top_posts_th'>Topic Title</th><th class='top_posts_th'>Replies</th><th class='top_posts_th'>Views</th></tr>";
$topics .= "<tr><td colspan='3'><hr /></td></tr>";
while($row2 = mysqli_fetch_assoc($query2)){
$cid = $row2['cid'];
$tid = $row2['id'];
$title = $row2['topic_title'];
$views = $row2['topic_views'];
$date = $row2['topic_date'];
$date = fixDate($date);
$creator = $row2['username'];
$topics .= "<tr><td class='top_posts_td'><a href='forum_view_topic.php?cid=".$cid."&tid=".$tid."'>".$title."</a><br /><span class='post_info'>Posted
by: ".$creator."<br> on ".$date."</span></td><td class='top_posts_td'>0</td><td align='center'>".$views."</td></tr>";
$topics .= "<tr><td colspan='3'><hr /></td></tr>";
}
答案 0 :(得分:2)
类似......但不知道form_topics与forum_categories的关系,这可能是错误的。
它还假设您只想要显示在所有3个表中的记录,并且当不存在匹配时,将排除记录。
SELECT t.*, c.id AS cid, u.*
FROM forum_topics AS t
INNER JOIN forum_categories AS c
ON t.category_id = c.id
INNER JOIN users u
on u.id = t.topic_Creator
ORDER BY topic_reply_date DESC LIMIT 3
您当前的方法是在forum_topics和forum_categories之间进行交叉连接。这不太可能是你真正想要的。
答案 1 :(得分:1)
我不确定你的SQL级别是什么,但这通常是基本级别的。我建议在继续你的项目之前,先停下来阅读一下,至少要对这个主题有一个基本的了解。这是最常见的操作之一,并且掌握它的工作方式总是比StackOverflow上的一些更好,特别是因为它可能会遇到很多。
您正在寻找的是这样的:
SELECT * FROM forum_topics
INNER JOIN users
ON forum_topics.topic_creator = users.id
ORDER BY forum_topics.topic_reply_date DESC
LIMIT 3
这可以通过多种方式得到改进,例如为表名提供别名并指定所需的实际列(我留下了*)。
如果可以的话,尽量与命名保持一致。在您的示例中,“topic_creator”可能变为“user_id”,在这些情况下这是常态。通常,如果两个表之间存在1:N关系,请尝试将外键命名为“user_id”(与users.id相关联),“topic_id”(topics.id)等。