Как рандомно выбрать из цикла foreach?

168
31 января 2018, 14:58

Здравствуйте.

У меня стоит задача рандомно выбрать из цикла foreach id сотрудника, при этом не учитывать старый id сотрудника. На рандоме застыл...

if($queryStaffAccess = $mysqli->query("SELECT * FROM `staff` WHERE id_cabinet = '$id_cabinet'")) {
        if($queryStaffAccess->num_rows) {
            while($StaffAccess = $queryStaffAccess->fetch_assoc()) {
                $StaffAccessBuffer[] = $StaffAccess;
            }
        }
    } 
    foreach($StaffAccessBuffer as $StaffAccessValue) {
        if ($StaffAccessValue['id_staff'] !== $id_staff_old and $StaffAccessValue['application'] == '1'){
            //выбрать рандомно          
        }
    }

P.S. Все в целях экономии запросов к базе, так как сейчас идут два запроса на каждую заявку, а их сотни тысяч. Получается при 1000 проверяемых заявок к базе еще 2000 дополнительных запросов в минуту.

Answer 1

Как вариант сделать так

SELECT name
  FROM random AS r1 JOIN
       (SELECT CEIL(RAND() *
                     (SELECT MAX(id)
                        FROM random)) AS id)
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1

Либо сделать shuffle на массив $StaffAccessValue и потом выбирать по очереди и делать сравнения на $StaffAccessValue['application'] == '1'

READ ALSO
Yii2, поиск точки входа

Yii2, поиск точки входа

Мне предоставили доступ к проекту Yii2И я не могу понять где находится точка входа в приложение(индексный файл) чтоб указать точку входа для...

151
Как в Laravel Dusk заставить выбрать фото?

Как в Laravel Dusk заставить выбрать фото?

Есть задачкаНаписать автотест, который бы менял аватарку пользователя в личном кабинете

132
как реализовать вызов метода модели при каждом обращении к контроллера через поведение yii2?

как реализовать вызов метода модели при каждом обращении к контроллера через поведение yii2?

как реализовать вызов метода модели при каждом обращении к контроллера через поведение yii2?

156