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

标签 mysql wordpress

我有一个包含 100,000+ 用户的 WordPress 用户数据库表。作为插件的一部分,我需要列出订阅者。显然获得 100,000 个用户需要进行分页。为了获得计算分页的用户总数,我无限制地运行主查询并对结果执行 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_user函数可以做到这一点 - 我只是用它作为一个简化的例子(查询实际上更复杂)

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

最佳答案

您的查询的问题是您按 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%'

关于mysql - 使用联接对大型用户数据库进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25039675/

相关文章:

MySQL左连接子查询空连接

mysql - 安装rails 2.3.5 mac os 10.6(雪豹)

php - 使用另一个标签将缩略图添加到 WordPress RSS

database - 自定义 WordPress 评论帖子查询

php - 尝试将 for i+ 放入 mysql 查询、php wordpress 中

wordpress - Docker公开服务以实现Docker化的wordpress多站点

mysql服务器不会停止

php - Active Record 查询中的 Codeigniter 括号

php - mysql php函数没有返回值

wordpress - Varnish 和 wordpress 之间的 Docker 链接不起作用