我有一张桌子,可以像这样打电话给帖子:
post_id topic_id user_id content date
1 7 12 bla bla 7/15/2014
2 16 70 bla bla 7/16/2014
3 7 14 bloa bla 7/20/2014
假设我有另外两个名为 users 的表,其中包含user_id
和username
列,并且主题表已链接到名为topic_id
的外键的发布表。 帖子表中的user_id
是用户表的外键。
假设我可以成功回显帖子表中的所有列。
正如您在帖子表中所看到的,topic_id # 7
有两个(可能还有更多)post_id# 1 和 3 ,将由与任何其他user_ids
相关联的任何其他usernames
添加。
但是,我的问题是,我只能回复与特定 topic_id 相关联的所有Posted By username
的字符串/文本usernames
,即#7现在,我想要和正在努力的是回应第一个username
(当然来自用户表)谁添加了post_id
# 1以及字符串/文字,例如发布者,其输出类似于Posted By username1
(user_id#12);和post_id
#3以及另一个字符串/文本,如回复者,其输出类似于Replied By usename2
(user_id#14)。
注意:这是我的查询:
$q = "SELECT post_id, content, date, username
FROM posts
INNER JOIN users USING (user_id)";
$r = mysqli_query ($dbc, $q)
while ($row= mysqli_fetch_array($r, MYSQLI_ASSOC)) {
echo "<p>Posted By {$row['username']} ({$row['date']})<br />{$row['content']}</p><br />\n";
}
我们将非常感谢您的帮助!谢谢
答案 0 :(得分:0)
试试这个:
$q = "SELECT p.post_id, p.content, p.date, u.username
FROM posts p JOIN users u on (u.user_id=p.user_id)";
答案 1 :(得分:0)
好的,我正在更新Perry的帖子,我想我明白你想做什么,这是
您需要按主题排序,然后发布帖子,以便创建帖子的人成为第一个
$q = "SELECT p.post_id, p.content, p.date, u.username ,p.topic_id
FROM posts p JOIN users u on (u.user_id=p.user_id)
ORDER BY p.topic_id, p.post_id
";
现在在你的while循环中你需要做这样的事情,我们还需要跟踪哪些主题已经显示,所以我们需要一个空数组。
$displayedTopics = array();
while ($row= mysqli_fetch_array($r, MYSQLI_ASSOC)) {
if (!in_array($row['topic_id'],$displayedTopics))
{
echo "<p>Posted By {$row['username']} ({$row['date']})<br />{$row['content']}</p><br />\n"; // We echo out from who it was posted
// Then add it to the displayed array
$displayedTopics[] = $row['topic_id'];
}
// Otherwise we just echo out as it was a reply
else
echo "<p>Replied By {$row['username']} ({$row['date']})<br />{$row['content']}</p><br />\n";
}
希望这会有所帮助,我明白你想要完成的任务!