查询没有给出我想要的结果

问题描述 投票:2回答:2

我已经创建了这个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
  1. 第一个问题是:人们从建议的群体中看到自己的群体。我不想在此查询中建议显示自己的组。
  2. 第二个问题是:人们从建议的群体中看到他加入的群体。我不想在此查询中建议显示他的加入组。

您可以按如下方式测试演示的第一个问题:

数字10是谁创建了组sapsik(group_id 16)。查询必须在输出中禁用此行,因为我们在此查询中使用10。

F.group_oid <> '10' AND
F.group_user_id <> '10' 

您还可以使用以下方法测试第二个问题:

8号没有创建他自己的组,8号刚刚加入16组(qazxsw poi)。但是,如果您更改以下这样的行

table group_users, row group_oid 16 , group_user_id 8

8号继续看到仍在注册的组。

php sql database
2个回答
4
投票

你真的需要取F.group_oid <> '8' AND F.group_user_id <> '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 将始终为true。


3
投票

使用后聚合过滤的另一个版本。要记住:WHERE过滤具有过滤器组的行。

F.group_user_id <> '10'
© www.soinside.com 2019 - 2024. All rights reserved.