【发布时间】:2018-03-15 00:42:13
【问题描述】:
我需要从 3 个不同的表中提取数据。我们需要做的是从帖子表中提取帖子,其中发布帖子的用户被设置为公共用户,或者如果设置为私有,他们授予访问权限的用户可以查看他们的帖子。
这是表格:
user: id, username, name, password, email, private
posts: id, title, user, date, state
privateallowed: id, privateuser, alloweduser
这是我尝试获取记录的代码:
$username = $_COOKIE['username'];
$sqlposts = "select p.id, u.id, u.private, a.privateuser, a.alloweduser from user u
inner join posts p on u.id = p.user
inner join privateallowed a on a.privateuser = u.id and a.alloweduser = " . $username . "
where u.private='public' or (a.privateuser=p.user and a.alloweduser=" . $username . ")";
$resultpost = mysqli_query($dbcon, $sqlposts);
$numrows = mysqli_num_rows($resultpost);
很遗憾,没有返回任何记录。感谢您提供任何帮助或想法。
【问题讨论】:
-
即使是最简单的查询也会返回任何记录吗?例如
SELECT * FROM User? -
是的,如果我只是从任何表中进行简单的选择,它就可以正常工作。我认为问题出在连接的语法上,只是不确定在哪里。
-
以下内容对我来说有点多余
or (a.privateuser=p.user and a.alloweduser=" . $username . ")",因为您已经在u.id = p.user上为表posts执行INNER JOIN。因此,如果a.privateuser = u.id那么a.privateuser = p.user -
感谢您的回复。在 php 中,点和变量之间的空格无关紧要。我会在早上试一试,让你知道这是否有效。
-
字符串值需要用引号引起来,所以不要使用
a.alloweduser = " . $username . ",而是尝试使用a.alloweduser = '" . $username . "'。