2016-12-16 5 views
-1

Предположим, у меня есть база данных автомобилей, которые доступны для дилерских центров для покупки оптом. Они заполняют форму на нашем сайте, и я посылаю им заказ на поставку для их подписания.Группировка объектов 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); 
+0

Вы должны решить это в запросе. Если это база данных SQL, вы должны иметь возможность создавать элементы своей таблицы в запросе, использующем 'group by'. – trincot

+0

@ trincot yup ... это сделал трюк! –

+0

ОК, я отправил его в качестве ответа. – trincot

ответ

0

Вы должны решить это в запросе.

Если это база данных SQL, вы должны иметь возможность создавать элементы своей таблицы в запросе, который использует group by (по трем полям, которые вы упомянули). Затем вы можете применить агрегацию на другом, числовое поле (ы) (sum, min, max, ... по мере необходимости).

0

У меня тоже есть такая же проблема при работе с объектом. Я думаю, в вашем случае, вы можете создать ключ из группы 3 основных атрибутов:

Ex: $ ключ = md5 (марка + модель + передача)

Таким образом, любой объект получил тот же md5 хэш , будет хранить в одном массиве

$ массив [md5 (марка + модель + передаче)]

Надеется, что это поможет

+0

намного умнее моего подхода ха-ха. Я должен попробовать это –

Смежные вопросы