PHP - выбрать случайный из SQL-запроса, а не «для каждого»

Просто интересно, можно ли изменить этот раздел кода. Прямо сейчас он направляется к базе данных и автоматически присоединяется к группе пользователя WordPress, если он был отмечен в панели администратора. Вместо отмеченной галочкой группы foreach можно ли изменить это так, чтобы из отмеченных групп она выбирала случайную группу для автоматического присоединения?

if (!function_exists('update_auto_join_status')) {
    function update_auto_join_status($user_id) {
        global $wpdb, $bp;

        // get list of groups to auto-join.
        $group_list = $wpdb->get_results("SELECT * FROM {$bp->groups->table_name} WHERE auto_join = 1");
        foreach ($group_list as $auto_join_group) {
            groups_accept_invite( $user_id, $auto_join_group->id );
        }
        $wpdb->query("UPDATE {$wpdb->users} SET auto_join_complete = 1 WHERE ID = {$user_id}");
    }

    add_action( 'user_register', 'update_auto_join_status');
}

Я совсем новичок в PHP - с чего бы мне начать?

Большое спасибо за любую помощь.


person Community    schedule 31.05.2013    source источник


Ответы (3)


Вы можете просто ORDER BY RAND() LIMIT 1 выбрать одну группу случайным образом.

$group_list = $wpdb->get_results("SELECT id FROM {$bp->groups->table_name} WHERE auto_join = 1 ORDER BY RAND() LIMIT 1");
groups_accept_invite( $user_id, $group_list[0]->id );
person Mike Brant    schedule 31.05.2013

Если $group_list является массивом, вы можете получить случайный элемент из списка следующим образом:

$auto_join_group = $group_list[rand(0, count($group_list)-1)];
person James Holderness    schedule 31.05.2013

Может быть что-то вроде этого (используйте с осторожностью!):

    // change 30 to however many you want to limit from, or remove the limit altogether
    $group_list = $wpdb->get_results("SELECT * FROM {$bp->groups->table_name} ORDER BY RAND() LIMIT 30"); 

Вам нужно будет продолжать использовать раздел foreach(), потому что эта функция выглядит так, как будто она добавляет этого пользователя в эту группу.

person Rob W    schedule 31.05.2013
comment
Упс, извините, отредактировал неправильный ответ ... вы можете отклонить мои правки, хотя я пытался вернуть их так, как я думаю. - person Mike Brant; 01.06.2013