【问题标题】:Fetching data from different table in while loop在while循环中从不同的表中获取数据
【发布时间】:2014-03-27 08:57:55
【问题描述】:

我有两个生成留言板输出的表。第一个表使用 while 循环显示表 posts 中给定主题的所有答案。这很好用。

然后我有另一个名为 thumbsup 的表,当用户点击“竖起大拇指”图标到留言板中的帖子时收集该表。我只希望特定用户能够按一次“竖起大拇指”按钮。

我正在尝试从 thumbsup 表中获取数据,以确定用户是否为 posts 表中的每个帖子按下了按钮。

我试过下面的sql语句:

SELECT topic, user FROM thumbsup WHERE topic = ".$posts_row['id']." AND user = ".$_SESSION['username']."

表格thumbsup如下所示:

id | topic | user
1  | 1     | bill
2  | 3     | rachel
3  | 5     | bill
4  | 5     | rachel
5  | 7     | rachel

我的问题是我无法让 sql 按主题和用户名进行排序。我可以让它按主题排序,但它只输出给定帖子的第一个条目;在这种情况下,它会在 5 号帖子上输出“bill”。

我想我可能需要在现有的 while 循环中添加一个新的 while 循环,但我也没有让它工作。

非常感谢您的帮助!

编辑:

好的,所以我有这个查询来获取帖子,并检查用户是否有赞许记录:

"SELECT posts.topic, posts.id, posts.content, posts.date, posts.user, posts.moderation, thumbsup.topic, thumbsup.user FROM posts LEFT OUTER JOIN thumbsup ON posts.id = thumbsup.topic AND thumbsup.user = ".$_SESSION['username']." WHERE posts.topic = " . $mysqli->real_escape_string($_GET['id']).""

  • 这会导致 while 循环中没有帖子,但如果我删除用户名,它会再次只显示帖子。我的查询有问题吗?

EDIT2 - 解决方案:

我终于做对了,非常感谢Kickstart

这是我最后的 sql 查询:

SELECT posts.topic, posts.id, posts.content, posts.date, (posts.user) AS users, posts.moderation, thumbsup.topic, thumbsup.user FROM posts LEFT OUTER JOIN thumbsup ON posts.id = AA_forum_thumbsup.topic AND thumbsup.user = '".$_SESSION['username']."' WHERE posts.topic = " . $mysqli->real_escape_string($_GET['id'])."

正如 Kickstart 所提到的,我需要在用户名周围加上额外的引号,因为它是一个字符串,而且我还必须将帖子表中的用户定义为“用户”。否则结果只会输出用户名如 $_SESSION['username'] 的帖子上的数据。

非常感谢,我希望这对其他人也有用!

【问题讨论】:

  • 您真正想要什么?看不懂举个例子。你想要什么主题没有 5
  • 它会在某个topic 上输出username 的第一个赞。如果您只想知道此人是否在该帖子上单击了竖起大拇指,则不需要 while 循环
  • 加入两个表并在查询中使用排序(以逗号分隔对多个列进行排序)
  • 其实你想要的输出是什么...?
  • 我希望能够确定用户是否已经为帖子投票。如果用户已经投票,那么他将无法再次为该特定帖子投票。就像论坛的“点赞”或 Facebook 的“赞”按钮。

标签: php mysql loops while-loop


【解决方案1】:

使用 LEFT JOIN,如下所示:-

SELECT posts.id, thumbsup.user 
FROM posts
LEFT OUTER JOIN thumbsup 
ON posts.id = thumbsup.topic
AND thumbsup.user = '".$_SESSION['username']."'

如果 $_SESSION['username'] 有此帖子的赞许记录,这将带回所有帖子(在这种情况下只是它们的 id)和用户字段将包含用户名。如果他们不这样做,则返回的用户字段将为 NULL

【讨论】:

    【解决方案2】:

    我认为您正在登录您的应用程序,如果是,则仅记录登录用户,然后按主题对其进行排序。现在你将得到一个以值作为主题的数组。在这里你可以使用 inarray() 进行检查。如果该值在 inarray 中存在,则表示用户已经投票。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 2019-09-11
      • 2018-02-18
      • 2019-08-09
      • 2019-02-18
      • 2014-11-13
      • 1970-01-01
      相关资源
      最近更新 更多