在PHP中回显特定的字符串/文本以及特定的用户名

时间:2014-08-04 06:38:52

标签: php

我有一张桌子,可以像这样打电话给帖子

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_idusername列,并且主题表已链接到名为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";


}

我们将非常感谢您的帮助!谢谢

2 个答案:

答案 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";


     }

希望这会有所帮助,我明白你想要完成的任务!