Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL,如果至少有一行包含值,则不提取用户id_Mysql_Sql_Wordpress - Fatal编程技术网

Mysql SQL,如果至少有一行包含值,则不提取用户id

Mysql SQL,如果至少有一行包含值,则不提取用户id,mysql,sql,wordpress,Mysql,Sql,Wordpress,我在SQL查询方面遇到了一些问题。wordpress数据库中有超过10万用户,我正试图根据用户所属的组提取一些数据 我们有两个组,注册组和专业组。注册的只是每个注册到我们网站的用户。Pro是指付费订阅的用户。我遇到的问题是,WP_Groups插件的工作方式是将用户添加到组中,而不是将其从注册组中删除。这意味着在数据库中,在wp_groups_user_group表中,每个用户都有重复的条目。注册=1,Pro=2,例如: user_id | group_id 1 | 1

我在SQL查询方面遇到了一些问题。wordpress数据库中有超过10万用户,我正试图根据用户所属的组提取一些数据

我们有两个组,注册组和专业组。注册的只是每个注册到我们网站的用户。Pro是指付费订阅的用户。我遇到的问题是,WP_Groups插件的工作方式是将用户添加到组中,而不是将其从注册组中删除。这意味着在数据库中,在wp_groups_user_group表中,每个用户都有重复的条目。注册=1,Pro=2,例如:

user_id  |  group_id
   1     |     1
   1     |     2
因此,对于这个特定的查询,我基本上希望提取除pro组中的用户之外的所有用户。因此,在上面的示例中,我不想拉出ID为1的用户。但是,如果我使用
WHERE user_id=2
WHERE user_id=1
将以任何方式提取用户,因为两个条目具有相同的用户id

当至少一个组id的值等于2时,有没有一种方法基本上可以声明不拉入任何用户id

我以前会把所有的用户都拉进来,然后在一个循环中对它们进行筛选,但是由于用户数量太大,它在完成循环之前就造成了超时

目前的查询如下所示:

$query = $wpdb->get_results("SELECT wp_users.id, wp_groups_user_group.group_id
                             FROM wp_users
                             INNER JOIN wp_groups_user_group
                             ON wp_users.id = wp_groups_user_group.user_id
                             WHERE wp_groups_user_group.group_id = 1");

内部查询将选择每组的
max
id。因此,如果至少有一个用户有一个关联的组_id=2,则根据外部查询条件,该组将被忽略。

您已接近此处。通常,一个
HAVING
子句对于这种过滤很有用

SELECT
  `user_id`,
  MAX(`user_group_id`) AS `max_group_id`
FROM `wp_groups_user_group`
GROUP BY `user_id`
HAVING `max_group_id` = 1

这将确定
wp\u groups\u user\u group
表中每个用户的最大组数。并对记录集执行选择后筛选,以删除最大组id>1的任何用户(即,他们不是基本用户)。我没有在这里使用连接,因为不需要只获取用户id列表。如果您需要用户表中的更多信息,显然您需要一个连接。

这很有效,马上就可以!非常感谢!。。。你能解释一下语法吗,
a
让我发火了。我掌握了子查询和max\u grp\u id。。。但是a.id和a.max\u grp\u id?a类似于变量吗?
a
是内部查询的别名。你可以给它取任何你想要的名字。并且
max
功能选择每个用户id的最大组id。感谢您花时间回复!我将vkp的答案标记为正确,它确实可以复制和粘贴,但我只想说声谢谢,因为它真的很感激!干得好Mike和explanation@abbott567您可能希望以“我的格式”运行此查询以进行性能比较。通常有很多方法可以解决SQL中的问题,但是您应该始终了解性能问题。被接受的解决方案中有一个子选择,通常可能是次优的。嗨,迈克,谢谢。Tbh我对SQL非常陌生,我以前在Rails中开发过,很多都是为我做的。我确实觉得有部分更容易阅读。我会试着让它发挥作用
SELECT
  `user_id`,
  MAX(`user_group_id`) AS `max_group_id`
FROM `wp_groups_user_group`
GROUP BY `user_id`
HAVING `max_group_id` = 1