我有一个表,call posts像这样:
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
列,以及topics表,该表通过名为topic_id
的外键链接到posts表。posts表中的user_id
是users表的外键。
假设我可以成功地回显posts表中的所有列。
正如您在posts表中看到的,topic_id # 7
有两个(可能更多)post_id # 1和3,这将由与任何其他usernames
关联的任何其他user_ids
添加。
然而,我的问题是,我只能为所有与特定topic_id相关联的usernames
回显字符串/文本Posted By username
,即# 7。现在,我想要的和我正在努力的是echo第一个username
(当然是从用户表)谁添加了post_id
#1与字符串/文本像张贴的这是输出像Posted By username1
(user_id #12);和post_id
# 3以及另一个字符串/文本,如 reply By,输出如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";
}
感谢您的帮助!由于
好的,我正在更新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";
}
希望这有助于我理解你想要完成什么!
试试这个:
$q = "SELECT p.post_id, p.content, p.date, u.username
FROM posts p JOIN users u on (u.user_id=p.user_id)";