在while循环中从不同的表中获取数据

时间:2014-02-25 08:55:56

标签: php mysql loops while-loop

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

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

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

我尝试了以下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号邮件上输出“账单”。

我想我可能需要在现有的while循环中使用一个新的while循环,但我还没有那个工作。

非常感谢!

编辑:

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

"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所提到的,我需要在用户名周围添加额外的引号,因为它是一个字符串,我还必须将posts表中的useres定义为“users”。否则,结果只会在用户名为$ _SESSION ['username']的帖子上输出数据。

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

2 个答案:

答案 0 :(得分:1)

使用LEFT JOIN,如下所示: -

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

这将带回所有帖子(在这种情况下只是他们的ID),如果$ _SESSION ['username']有此帖子的thumbsup记录,则user字段将包含用户名。如果没有,那么返回的用户字段将为NULL

答案 1 :(得分:0)

我认为您是登录到您的应用程序,如果是,则只记录登录用户,然后按主题对其进行排序。现在你将获得带有值作为主题的数组。在这里你可以使用inarray()进行检查。如果值在inarray中持续存在则意味着用户已经投票。