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

标签 php sql database

我创建了这个 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(表 group_users,行 group_oid 16 ,group_user_id 8)。但是如果你像这样改变下面的行

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

8号继续查看仍然注册的群组。

最佳答案

您真的需要获取 F.group_oidF.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/

相关文章:

php - 从外部服务器更新 php 应用程序

php - 适用于WordPress管理员的Google Analytics(分析)过滤器

mysql - MySQL MAX函数的结果

sql - 仅从 MySQL 连接返回唯一的表 ID

JavaDB 有端口连接错误。

php - 如果使用 jquery 出现错误,则无法为某些字段显示红色

php - 将数据加载到水平时间线中

python - 将具有太多值的行转换为列

c# - property.GetValue(this, null) 导致 "Object does not match target type"

mysql - 将多列查询转换为行查询