@KRHD

Как одним запросом в базу получить все записи с разными критериями?

foreach($users as $row){
 $stmt = $db->query("SELECT * FROM `plugin_core` WHERE `id` = '{$row['player_id']}'");
 $user = $stmt->fetchAll();
 echo "<div class='user' id='clanUser#{$row['player_id']}'>{$user[0]['nickname']}</div>";
			}

У меня код после каждого получения id опрашивает базу чтоб получить ник, как можно сделать тоже самое но одним запросом в базу?
Типа массивом или т.п
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 2
Arris
@Arris
Сапиенсы учатся, играя.
Сначала готовим список айдишников, потом дёргаем их одним запросом, потом результат (2+ мерный асс.массив) разбираем по кусочкам.

Как-то так:
$ids = array();
foreach ($users as $row) {
  $ids[] = $row['player_id'];
}
$in_set = implode(','  , $ids); 
$smtp = $db->query("SELECT * from `plugin_code` WHERE `id` IN ({$in_set})");
$all_users = $smtp->fetchAll();


А дальше уже бегаете по массиву $all_users

foreach ($all_users as $row) {
  // выводим все что надо
}


P.S. Только я бы посоветовал не делать SELECT * и не извлекать тупо все поля, а дёргать строго то, что нам дальше нужно. Оптимальнее получается.
P.P.S. По идее выдергивание айдишников в массив можно сделать при помощи какой-нибудь хитрой конструкции на базе array_map(), но я решил сделать просто и понятно :)
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Если $users приходит из БД, то получать пользователей тем же запросом, используя JOIN.

Ecли же приходит со стороны, делать как в ответе Arris , но только не пихать айдишники прямо в SQL, а использовать параметризованный запрос, https://phpdelusions.net/pdo#in
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы