使用连接分隔大型用户数据库

时间:2014-07-30 14:38:03

标签: mysql wordpress

我有一个wordpress用户数据库表100,000+用户。作为插件的一部分,我需要列出订阅者。显然,需要对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函数来执行此操作 - 我只是将其用作简化示例(查询实际上更复杂)

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

1 个答案:

答案 0 :(得分:2)

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