#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. хорошо, спасибо. Позже я буду ждать от вас дополнительной помощи.