我有一个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函数来执行此操作 - 我只是将其用作简化示例(查询实际上更复杂)
所以问题是"如何在这种情况下有效地获得总行数?"
答案 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%'