Mysql 使用联接对大型用户数据库进行分页

Mysql 使用联接对大型用户数据库进行分页,mysql,wordpress,Mysql,Wordpress,我有一个wordpress用户数据库表100000+用户。作为插件的一部分,我需要列出订阅者。显然,获得100000个用户需要分页。为了获得进行分页的总用户数,我正在无限制地运行主查询,并对结果执行PHP count() SELECT role.umeta_id, role.user_id, role.meta_key, role.meta_value role, u.ID, u.user_login, u.user_email, u.user_registered FROM wp_

我有一个wordpress用户数据库表100000+用户。作为插件的一部分,我需要列出订阅者。显然,获得100000个用户需要分页。为了获得进行分页的总用户数,我正在无限制地运行主查询,并对结果执行PHP count()

SELECT role.umeta_id, role.user_id, role.meta_key, role.meta_value role,       u.ID, u.user_login, u.user_email, u.user_registered
FROM wp_users AS u
LEFT JOIN wp_usermeta role ON role.user_id = u.ID
AND role.meta_key =  'wp_capabilities'
WHERE role.meta_value LIKE  '%subscriber%'
GROUP BY u.ID
ORDER BY u.ID ASC 
我(毫不奇怪)这样做会耗尽内存。我试着做了一个类似的计数

SELECT COUNT( u.ID ) 
FROM wp_users AS u
LEFT JOIN wp_usermeta role ON role.user_id = u.ID
AND role.meta_key =  'wp_capabilities'
WHERE role.meta_value LIKE  '%subscriber%'
GROUP BY u.ID
ORDER BY u.ID ASC 
但它不会返回单个值,而是返回count=1的行和行

我知道Wordpress中有get_用户函数可以实现这一点——我只是将其作为一个简化的示例(查询实际上更复杂)


因此,问题是“在这种情况下,如何有效地获取总行数?”

查询的问题是,您是按u.ID分组的,而count是一个聚合函数

编辑: 我建议你把这群人和这批人都除掉,然后去你剩下的地方

SELECT COUNT( u.ID ) 
FROM wp_users AS u
LEFT JOIN wp_usermeta role ON role.user_id = u.ID
AND role.meta_key =  'wp_capabilities'
WHERE role.meta_value LIKE  '%subscriber%'

只要删除“GROUP BY u.ID ORDER BY u.ID ASC”,就会返回用户总数。“聚合函数”立即解释了这一点。