Вы пытаетесь проверить для каждой команды, есть ли хотя бы один результат нулевой,
попробуйте эту строку sql:
SELECT `team_id`, `team`, MIN(IFNULL(`result`, -1)) `result`
FROM `teams`
WHERE `group_id` = :id
GROUP BY `team_id`
IFNULL (result
, -1) вернет результат, если результат не нулевой, и -1 , если он нулевой
Следовательно, MIN (IFNULL (result
, -1)) вернет минимальное значение для всех результатов команды, а если будет нулевой результат, он вернет -1.
Поэтому все остальное довольно просто:
foreach($stmt->fetchAll() as $row) {
$a = $row['team'];
$b = $row['result'];
if ($b < 0) {
// disable case
} else {
// enable case
}
}
NB1: я предположил, что результаты не могут быть отрицательными, если это не так, используйте функцию ABS.
NB2: всегда лучше работать с индексами, чем с именем в транснациональных базах данных.