Предположим, у меня есть база данных автомобилей, которые доступны для дилерских центров для покупки оптом. Они заполняют форму на нашем сайте, и я посылаю им заказ на поставку для их подписания.Группировка объектов PHP для создания «уникальных» строк в таблице HTML
В этом заказе на поставку у меня есть таблица с описанием автомобилей, которые будут доставлены, если они подпишут контракт.
Мне сложно сгруппировать автомобили, не задавая несколько запросов к базе данных. Вот простой макет таблицы
<table>
<thead>
<tr>
<th>Make</th>
<th>Model</th>
<th>Transmission</th>
<th>Quantity</th>
<th>Price per Vehicle</th>
<th>Total Cost</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
Я хочу, чтобы иметь возможность сделать 1 тянуть из базы данных (так как он большой) и произвести тело таблицы следующим образом
<tbody>
<tr>
<td>Nissan</td>
<td>Altima</td>
<td>CVT</td>
<td>2</td>
<td>20000</td>
<td>40000</td>
</tr>
<tr>
<td>Nissan</td>
<td>Maxima</td>
<td>Automatic</td>
<td>3</td>
<td>30000</td>
<td>90000</td>
</tr>
<tr>
<td>Nissan</td>
<td>GTR</td>
<td>Automatic</td>
<td>1</td>
<td>130000</td>
<td>130000</td>
</tr>
<tr>
<td>Nissan</td>
<td>GTR</td>
<td>Manual</td>
<td>2</td>
<td>130000</td>
<td>260000</td>
</tr>
</tbody>
данных приходит из моего стола как 8 отдельных объектов. Я пытаюсь написать сценарий, который поглощает ответ и возвращает массив (который можно легко преобразовать в таблицу), который группирует объекты по трем ключевым атрибутам.
«делает, модель и передачу»
Любого объект, который соответствует другому объекту в ответ на всех три указанных выше атрибуты должны представлять одну новую строку в таблице с величиной соответствием столбца соответственно.
Подход, основанный на моем подходе, заключался в том, чтобы продолжать запрашивать базу данных ... но это было слишком расточительно. я был в состоянии понять, как в соответствии с одним атрибутом
$noRepeatMake = [];
$i = 1;
foreach($cars as $car){
if(!in_array($car->make, $noRepeatMake)) {
$count .= Cars::where('BAID', $id)->where('make', $car->make)->where('model', $car->model)->where('trans', $car->trans)->count();
if ($i < $cars->count()) {
$count .= ",";
}
array_push($noRepeatMake, $car->make);
}
$i++;
}
$roomCount = explode(",", $roomCount);
Вы должны решить это в запросе. Если это база данных SQL, вы должны иметь возможность создавать элементы своей таблицы в запросе, использующем 'group by'. – trincot
@ trincot yup ... это сделал трюк! –
ОК, я отправил его в качестве ответа. – trincot