目前,查询工作正常并且按预期进行。但是,我想更改查询,以便它除了检索其他帖子外还检索用户自己的帖子。我怎样才能做到这一点?我已经尝试过 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)
.
最佳答案
您多次获得用户自己的帖子,因为查询连接了您的两个表posts
和friends
。因此,如果您过滤 (P.author = $_SESSION['username'])
,您将获得他的一篇 posts
以及 friends< 中的每一项
表。
您可以使用变通方法。如果您的 friends
表有主键/唯一键,比方说 id
,您可以使用 OR (P.author = '$_SESSION[username]' AND F .id = (SELECT id FROM friends LIMIT 1))
.必须有更高效的方法,但这应该已经有所帮助。
关于php - 修改 SQL 查询以返回用户自己的帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926417/