Проверьте, пуста ли какая-либо строка группы - PullRequest
0 голосов
/ 05 сентября 2018

Я проверяю все строки group by $b, в случае пустой строки в $b Я хочу отключить кнопку группового столбца $a, как в следующем сценарии. И я использую group by, поэтому он работает только в первом ряду $b. Как отключить кнопку группового столбца, если в какой-либо строке он пуст?
И я должен использовать цикл, чтобы проверить все строки $b.

PHP

$id = $_POST['id'];
        $sql = $db->prepare("SELECT a, b from table  WHERE id = :id group by a");
        $sql ->bindparam(':id',$id);
        $sql ->execute();   
        while($row = $sql ->fetch(PDO:: FETCH_ASSOC) ) {
                $a = $row['a'];
                $b = $row['b'];
                if(!empty ($b))
                    {
                        echo '<tr>
                        <td><input type="button" name="a[]" value="'.$a.'"></td>
                        </tr>';
                    }else{
                        echo '<tr>
                        <td><input type="button" name="a[]" value="'.$a.'" disabled></td>
                        </tr>';
                    }

        } // while

Ответы [ 5 ]

0 голосов
/ 12 сентября 2018

Вы пытаетесь проверить для каждой команды, есть ли хотя бы один результат нулевой, попробуйте эту строку 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: всегда лучше работать с индексами, чем с именем в транснациональных базах данных.

0 голосов
/ 11 сентября 2018

Я думаю, что вы пытаетесь отключить кнопку Команды, которая имеет нулевое значение Result в любой строке.

Итак, если здесь вы используете Group By только для столбца a и хотите перебрать все значения b для проверки на ноль, вам нужно использовать статистическую функцию для b.

Попробуйте использовать следующий запрос:

SELECT a, MIN(IF(b IS NULL or b = '', -1, b)) b_val FROM teams WHERE group_id = :id GROUP BY a

Здесь, если в какой-либо строке вашего примера значение Result равно Null, для этой группы будет возвращено b_val=-1 вместо значений 55, 14, 26 и т. Д.

Ваше условие If if(!empty ($b)) изменится на: if($b!=-1)

0 голосов
/ 08 сентября 2018

условие: ( is_null($c) ? ' disabled' : '')

, что означает: если $c равно NULL, вернуть строку _disabled.

в контексте:

echo '<tr>
    <td><input type="button" name="a[]" value="'.$a.'"'.( is_null($c) ? ' disabled' : '').'></td>
    <td><input type="button" name="b[]" value="'.$b.'"'.( is_null($c) ? ' disabled' : '').'></td>
</tr>';
0 голосов
/ 10 сентября 2018

Попробуйте этот код (работает у меня):

<?php
$id = $_POST['id'];
define('DBINFO', 'mysql:host=localhost;dbname=yourdatabasehere');
define('DBUSER','root');
define('DBPASS','');
$con = new PDO(DBINFO, DBUSER, DBPASS);
$query = "SELECT team,result from teams  WHERE id = '$id' group by team";
$stmt = $con->query($query);
foreach($stmt->fetchAll() as $row):
    $a = $row['team'];
    $b = $row['result'];
    if(!empty ($b)):
?>
      <tr>
      <td><input type="button" name="a[]" value="<?= $a ?>"></td>
      </tr>
<?php
    else:
 ?>
       <tr>
       <td><input type="button" name="a[]" value="<?= $a ?>" disabled></td>
       </tr>
<?php
    endif;
endforeach;
?>
0 голосов
/ 08 сентября 2018

Сначала добавьте ORDER BY на ваш $sql

$sql = $db->prepare("SELECT a, b FROM `table` WHERE id = :id GROUP BY a ORDER BY b IS NULL, b ASC");

В MySQL значения NULL считаются ниже по порядку, чем любые значения, отличные от NULL. значение

Полезная ссылка: Здесь

...