9 ) { // Purge the visitor's with more than the defined hits. $result = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}statistics_visitor WHERE `hits` > %s", $purge_hits ) ); $to_delete = array(); // Loop through the results and store the requried information in an array. We don't just process it now as deleting // the rows from the visitor table will mess up the results from our first query. foreach ( $result as $row ) { $to_delete[] = array( $row->ID, $row->last_counter, $row->hits ); } if ( count( $to_delete ) > 0 ) { foreach ( $to_delete as $item ) { // First update the daily hit count. $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}statistics_visit SET `visit` = `visit` - %d WHERE `last_counter` = %s;", $item[2], $item[1] ) ); // Next remove the visitor. Note we can't do both in a single query, looks like $wpdb doesn't like executing them together. $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}statistics_visitor WHERE `id` = %s;", $item[0] ) ); } $result_string = sprintf( __( '%s records purged successfully.', 'wp-statistics' ), '' . count( $to_delete ) . '' ); } else { $result_string = __( 'No visitors found to purge.', 'wp-statistics' ); } } else { $result_string = __( 'Number of hits must be greater than or equal to 10!', 'wp-statistics' ); } if ( $WP_Statistics->get_option( 'prune_report' ) == true ) { $blogname = get_bloginfo( 'name' ); $blogemail = get_bloginfo( 'admin_email' ); $headers[] = "From: $blogname <$blogemail>"; $headers[] = "MIME-Version: 1.0"; $headers[] = "Content-type: text/html; charset=utf-8"; if ( $WP_Statistics->get_option( 'email_list' ) == '' ) { $WP_Statistics->update_option( 'email_list', $blogemail ); } wp_mail( $WP_Statistics->get_option( 'email_list' ), __( 'Database pruned on', 'wp-statistics' ) . ' ' . $blogname, $result_string, $headers ); } return $result_string; }