背景信息 - 我总共有 4 张 table 。
- 帖子 - 来自普通用户的帖子
- 群组帖子 - 来自群组的帖子
- 好友列表 - 存储好友
- 群组成员身份 - 存储群组成员身份
我想要实现的是:该页面将列出您自己、您的 friend 以及您加入的群组的所有帖子。
(上一个查询)- 帖子和群组帖子位于同一个表中,并由“类型”字段标识
SELECT
DISTINCT p.id,
p.type,
p.user1,
p.user2,
p.content,
p.timestamp,
p.comments
FROM posts p, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR
p.user1 = 'MY ID' OR
(p.user1 = g.group_id AND g.user = 'MY ID')
ORDER BY p.timestamp, DESC LIMIT 10
以前,我在同一个表中有 posts 和 group_posts。但现在,我认为它们应该位于两个不同的表中。
(新查询)- 帖子和群组帖子位于单独的表中
SELECT
DISTINCT p.id,
p.type,
p.user1,
p.user2,
p.content,
p.timestamp,
p.comments,
gp.id,
gp.type,
gp.user1,
gp.user2,
gp.content,
gp.timestamp,
gp.comments
FROM posts p, group_posts gp, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR
p.user1 = 'MY ID' OR
(p.user1 = g.group_id AND g.user = 'MY ID')
ORDER BY p.timestamp, gp.timestamp DESC LIMIT 10
我得到的结果是整行都充满了我的 group_posts 中的相同帖子。
此外,我在 posts 和 group_posts 中的 ID 不按顺序排列,即 posts 可能有 100 个帖子,但 group_posts 可能只有 30 个。
出了什么问题?
最佳答案
试试这个:
SELECT
p.id,
p.type,
p.user1,
p.user2,
p.content,
p.timestamp,
p.comments,
gp.id,
gp.type,
gp.user1,
gp.user2,
gp.content,
gp.timestamp,
gp.comments
FROM posts p, group_posts gp, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR
p.user1 = 'MY ID' OR
(p.user1 = g.group_id AND g.user = 'MY ID')
GROUP BY p.id
ORDER BY p.timestamp, gp.timestamp DESC LIMIT 10;
注意将 DISTINCT
切换为 GROUP BY
以按每个帖子进行分组。
关于php - 从两个表中选择并从两个表中检查 'Friend lists',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28686763/