缩放WordPress用户查询
问题描述:
我的WP_Users表中有超过5万注册用户。通常我需要运行查询来检查和统计用户的不同状态。缩放WordPress用户查询
我经常写下类似的东西。
$users = get_users(); //This query is not limited I need to run across all my users.
$active_users = 0;
foreach ($users as $user) {
$last_transaction_date = strtotime(get_user_meta($user_id, 'last_trans_date', true));
$next_recurring_date = strtotime(get_user_meta($user_id, 'next_recurring_date', true));
$todays_date = strtotime('now');
if ($todays_date >= $last_transaction_date && $todays_date <= $next_recurring_date) {
$active_users++;
}
}
这里的问题是,它是生成每用户2数据库调用所以它的令人难以置信的慢,容易使事情崩溃。有没有人有建议?
答
你应该做的只有两次查询wp_usermeta表 这样
STEP1
$SQLresult1 = $wpdb->get_results("
SELECT user_id, meta_value
FROM wp_usermeta
WHERE meta_key = 'last_trans_date'
AND $todays_date >= meta_value
");
//convert it to array
SQLarr1 = [];
foreach ($SQLresult1 as &$item) {
SQLarr1[$item->user_id] = $item->meta_value
}
STEP2
$SQLresult2 = $wpdb->get_results("
SELECT user_id, meta_value
FROM wp_usermeta
WHERE meta_key = 'next_recurring_date'
AND $todays_date <= meta_value
");
//convert it to array
SQLarr2 = [];
foreach ($SQLresul2 as &$item) {
SQLarr2[$item->user_id] = $item->meta_value
}
STEP3
$active_users = 0;
foreach ($SQLarr1 as $user_id => &$item) {
if (isset($SQLarr2[$user_id]))
$active_users++;
}
我没有”不要检查这段代码。但你可以看到主要想法