目前,查询工作正常,并按照预期执行。但是,我想更改查询,以便除了其他帖子之外还检索用户自己的帖子。我怎样才能做到这一点?我尝试了OR P.author = $_SESSION['username']
之类的内容,但似乎这会导致每个用户自己的帖子多次回显。
$gtPsts = "SELECT P.id, P.subid, P.author, P.post, P.access, P.date, F.friends, F.following, F.f1, F.f2, F.status
FROM posts AS P, friends AS F
WHERE (F.f1 = '$_SESSION[username]' AND F.f2 = P.author AND F.status = 1 AND P.access = 'Public' OR P.access = 'Friends')
OR (F.f2 = '$_SESSION[username]' AND F.f1 = P.author AND F.status = 1 AND P.access = 'Public' OR P.access = 'Friends')
OR (F.f1 = '$_SESSION[username]' AND F.f2 = P.author AND F.following = True AND P.access = 'Public' OR P.access = 'Following')
ORDER BY P.date DESC LIMIT 20";
表的结构如下:id (int)
,subid (int)
,author (varchar)
,post (longtext)
,access (varchar)
,date (datetime)
。
答案 0 :(得分:0)
你得到了用户'多次拥有帖子,因为查询会加入您的两个表posts
和friends
。因此,如果您对(P.author = $_SESSION['username'])
进行过滤,则会将posts
中的一个与friends
表中的每个项目一起获得。
您可以使用变通方法。如果您的friends
表格包含主要/唯一密钥,请说id
,您可以使用OR (P.author = '$_SESSION[username]' AND F.id = (SELECT id FROM friends LIMIT 1))
。必须有一种更高效的方式,但这应该已经有所帮助了。