我有两个表生成留言板输出。第一个表使用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']).""
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']的帖子上输出数据。
非常感谢,我希望这对其他人也有用!
答案 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中持续存在则意味着用户已经投票。