我创建了这个 SQLFiddle 演示以更好地理解问题。
首先,我会尝试告诉你我想做什么。人们可以通过 Facebook 创建自己的群组页面。我让人们可以在我自己的社交网络项目中建立自己的群组页面。我们知道facebook在主页上以推荐群组的名义显示。有两个或多个不同的建议组。这正是我想做的。我想从我的主页显示建议的组。
正如您在查询中看到的,有一些可用的条件,分别如下:
1-) 创建群组的人不会在推荐群组中看到他所创建的群组。
2-) 此人无法从推荐群组中看到已加入的群组。
在推荐组中,我只想显示两个建议组。
查询在这里:
SELECT
G.group_id,
G.group_owner_id,
G.group_name,
G.group_title,
G.group_cover,
F.group_oid,
F.group_user_id
FROM group_users F
INNER JOIN groups G
ON G.group_id = F.group_oid
WHERE
G.status = '1' AND
F.group_oid <> '10' AND
F.group_user_id <> '10'
GROUP BY
F.group_oid
ORDER BY rand()
LIMIT 2
第一个问题是:人们从建议的群组中看到自己的群组。我 不想显示此查询中建议的他自己的组。
第二个问题是:人们从建议中看到他加入的群组 组。我不想显示他在此建议中加入的群组 查询。
您可以使用演示测试第一个问题,如下所示:
数字 10 是创建群组 sapsik 的人 (group_id 16)。该查询必须在输出中禁用该行,因为我们在此查询中使用 10。
F.group_oid <> '10' AND
F.group_user_id <> '10'
您还可以使用演示测试第二个问题,如下所示:
编号 8 没有创建自己的组,编号 8 刚刚加入组 16(表 group_users,行 group_oid 16 ,group_user_id 8
)。但是如果你像这样改变下面的行
F.group_oid <> '8' AND
F.group_user_id <> '8'
8号继续查看仍然注册的群组。
最佳答案
您真的需要获取 F.group_oid
和F.group_user_id
?
如果没有,您可以使用此查询:
SELECT
G.group_id,
G.group_owner_id,
G.group_name,
G.group_title,
G.group_cover
FROM groups G
WHERE
G.status = '1' AND
G.group_id NOT IN (
SELECT F.group_oid
FROM group_users F
WHERE F.group_oid = '10' OR
F.group_user_id = '10'
)
ORDER BY rand()
LIMIT 2
您的查询的问题是,如果两个用户位于同一组中,F.group_user_id <> '10'
永远是真的。
关于php - 查询没有给出我想要的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47977066/