Как я напишу свое условие, которое будет определять данные, если это собака или кошка, и сможет отображать их в соответствующем столбце?

#php

#php

Вопрос:

 Customer's Name | Dog | Cat
Glenn           |  1  |
Mark            |     |  1
Jim             |  2  |  3
  

Как определить мое количество, если оно принадлежит столбцу Dog или в Cat?

 <?php
require_once 'DbConnect.php';
$db = new DbConnect;
$conn = $db->connect();
$stmt = $conn->prepare("SELECT Customers_Name,Type, Count(Qunatity) AS count FROM dbo.Pet");
$stmt->execute();
$count = 0;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo '<tr>';
    echo '<td>"'.$row['Customers_Name'].'"</td>' . PHP_EOL;
    if ($row['type'] == "Dog"){
        echo '<td>' . $row['count']. '</td>' ;
    }else {
        echo '<td>' . $row['count']. '</td>' . PHP_EOL;
    }
}
?>
  

Комментарии:

1. покажите нам, что вы пробовали

2. то, что вы получаете в своем текущем выводе, также обновляет его в вашем вопросе

3. все подсчеты (количество) находятся в столбце dog

Ответ №1:

Вот одна из возможностей. Он добавляет пустую ячейку для кошек, когда это собака, и пустую ячейку для собак, когда это кошка.

 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo '<tr>';
    echo '<td>'.$row['Customers_Name'].'</td>';
    if ($row['type'] == "Dog") {
        echo '<td>' . $row['count']. '</td><td></td>';
    } else {
        echo '<td></td><td>' . $row['count']. '</td>';
    }
    echo '</tr>' . PHP_EOL;
}
  

Вот еще один вариант, использующий немного другую логику, плюс другой способ создания HTML. Лично я считаю, что это более читабельно, к тому же его легче расширить, если позже вы решите добавить птиц, кроликов и т.д.

 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)):
?>
    <tr>
        <td><?= $row['Customers_Name'] ?></td>
        <td><?= $row['Type'] == 'Dog' ? $row['count'] : '' ?></td>
        <td><?= $row['Type'] == 'Cat' ? $row['count'] : '' ?></td>
    </tr>
<?php
endwhile;
  

Обратите внимание, что если у вас есть клиент с собаками и кошками (как, по-видимому, указывает ваш желаемый результат), то ни того, ни другого недостаточно, и вам нужно будет проделать больше работы, чтобы объединить несколько строк результатов в одну строку таблицы.

Вот версия (непроверенная), которая объединяет все строки с одинаковыми именами, а затем выводит все это сразу. Если у вас много данных, это не будет отличным подходом, и вам лучше либо изменить структуру вашей базы данных, либо, по крайней мере, упорядочить ваш запрос по имени и адаптировать его для вывода строки всякий раз, когда вы получаете другое имя.

 $rows = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)):
    if (!array_key_exists($row['Customers_Name'], $rows)) {
        $rows[ $row['Customers_Name'] ] = [];
    }
    $rows[ $row['Customers_Name'] ][ $row['Type'] ] = $row['count'];
}

foreach ($rows as $name => $counts):
?>
    <tr>
        <td><?= $name ?></td>
        <td><?= $counts['Dog'] ?? '' ?></td>
        <td><?= $counts['Cat'] ?? '' ?></td>
    </tr>
<?php
endforeach;
  

Комментарии:

1. Если у клиента есть и собака, и кошка, он добавляет еще одну строку с тем же именем клиента. оно не будет объединяться всего в 1 строку.

2. Да, я указал это ограничение в своем ответе. Но это казалось немного другой проблемой, чем то, с чем вы боролись, и я не был уверен, что, возможно, показ решения для частичного случая поможет вам преодолеть трудности. Если у меня будет немного времени позже сегодня, я вернусь и обновлю более подробный ответ на этот вопрос.

3. хорошо, спасибо. Позже я буду ждать от вас дополнительной помощи.