Предыдущая тема закрыта.
Только что опять появилась проблема:
# Time: 150227 23:49:59
# User@Host: xxxxxxxxxxxxxxxx@ localhost []
# Query_time: 130.297054 Lock_time: 0.000235 Rows_sent: 4 Rows_examined: 261390302
SET timestamp=1425070199;
SELECT
us.ID AS user,us.user_registered AS time_action
FROM
wp_users AS us
WHERE
us.ID NOT IN (SELECT ua.user FROM wp_rcl_user_action AS ua);
-----------------------
т.е. после предыдущего исправления уменьшилось только значение Rows_sent.
Вроде понял в чем проблема:
После запуска скрипта, который мне давал Андрей, зарегистрировались 4 человека и сейчас разница между таблицей users и rcl_user_action - как раз 4 человека. что равняется Rows_sent: 4
Что делать? Видимо люди зарегались, но еще не логинились и из-за этого их нету в таблице rcl_user_action?
А не подскажете как конкретно это сделать? Через functions.php не получается:
add_action('user_register','my_function');
function my_function(){
$no_action_users = $wpdb->get_results("SELECT COUNT(us.ID) FROM ".$wpdb->prefix."users AS us WHERE us.ID NOT IN (SELECT ua.user FROM ".RCL_PREF."user_action AS ua)");
if($no_action_users){
$wpdb->query("
INSERT INTO ".RCL_PREF."user_action( user, time_action )
SELECT us.ID, us.user_registered
FROM ".$wpdb->prefix."users AS us
WHERE us.ID NOT IN ( SELECT user FROM ".RCL_PREF."user_action )
");
}
}
----------------
После регистрации просто белый экран и все. Да и такой способ, наверное, будет каждый раз проверять все 22к пользователей? Может менее ресурсозатратно было бы в таблицу rcl_user_action вставлять пользователя через хук add_action('user_register','my_function'); ?
цеплять через указанный хук не надо этот код, надо лишь вносить данные об активности пользователя
add_action('user_register','update_action_user_register'); function update_action_user_register(user_id){ global $wpdb; $time = current_time('mysql'); $wpdb->insert( RCL_PREF.'user_action', array( 'user' => $user_id, 'time_action'=> $time ) ); }
не знаю почему так у вас происходит, без дублирующего кода этого не может происходить.
Добавьте в функцию строчку с проверкой
$action = $wpdb->get_var("SELECT time_action FROM ".RCL_PREF."user_action WHERE user='$user_id'");
if($action) return false;
сразу после global $wpdb;