2014-11-05 2 views
1
<?php 
include ("config.php"); 
$results = $mysqli->query 
(" 
    SELECT    orders_history.transaction_id, 
         orders_history.items, 
         orders_history.quantity, 
         orders_history.one_product_price, 

         orders_list.status, 
         orders_list.invoices, 
         orders_list.payment_method, 
         orders_list.order_method, 


         delivery_orders.address, 
         delivery_orders.service, 
         delivery_orders.cost, 
         delivery_orders.city 

    FROM    orders_history 
    LEFT JOIN   orders_list 
    ON     orders_history.transaction_id = orders_list.transaction_id 
    LEFT JOIN   infistall_order 
    ON     orders_history.transaction_id = infistall_order.transaction_id 
    LEFT JOIN   delivery_orders 
    ON     orders_history.transaction_id = delivery_orders.transaction_id 
    WHERE    orders_list.customer_name = 'Klaudia'"  
); 

$orders = array();  
$html = '';  
if ($results) { 
    while($obj = $results->fetch_object()) { 
     $orders[$obj->transaction_id][$obj->items] = array(
      'invoices' => $obj->invoices, 
      'status' => $obj->status, 
      'payment_method' => $obj->payment_method, 
      'service' => $obj->service, 
      'cost' => $obj->cost, 
      'quantity' => $obj->quantity, 
      'one_product_price' => $obj->one_product_price, 
      'city' => $obj->city); 
    } 

    $html .= '<table width="70%"><tr>'; 
    $html .= '<td>transaction_id</td>'; 
    $html .= '<td>items</td>'; 
    $html .= '<td>quantity</td>'; 
    $html .= '<td>one_product_price</td>'; 
    $html .= '<td>status</td>'; 
    foreach ($orders AS $order_id => $order) { 
     $html .= '<tbody><tr><td rowspan="' . count($order) . '">' . $order_id . '</td>'; 
     $row = 1; 
     foreach ($order AS $item => $data) { 
      if ($row > 1) { $html .= '</tr><tr>'; } 
      $html .= '<td>' . $item . '</td>'; 
      $html .= '<td>' . $data['quantity'] . '</td>'; 
      $html .= '<td>' . $data['one_product_price'] . '</td>'; 
      $row++; 
      $html .= '<td rowspan="' . count($order) . '">' . $data['status'] . '</td>'; 
     } 
     $html .= '</tr><tbody>'; 
    } 
    $html .= '</table>'; 
} 
echo $html; 
?> 

Код выше приведет, как это:Предотвратить один данные в цикле

----------------------------------------------------------------------- 
id_cart   products  quantity  invoices  status 
----------------------------------------------------------------------- 
       this    2    $20   
       -------------------------------------------------------  
    0001   that    1    $20  pending 
       -------------------------------------------------------  
       those    2    $20     pending pending 
----------------------------------------------------------------------- 
           Total Invoices: $60 
----------------------------------------------------------------------- 

       this    2    $20   
       -------------------------------------------------------  
    0002   that    1    $20  approved 
       -------------------------------------------------------  
       those    2    $20    approved approved 
----------------------------------------------------------------------- 
           Total Invoices: $60 

Посмотрите на колонке статуса, где результат обхвата.

То, что я хочу, это не должно быть циклов и получить только один результат, как выглядит столбец id_cart. Это код для столбца состояния

$html .= '<td rowspan="' . count($order) . '">' . $data['status'] . '</td>'; 

Мне нужно его решить!

[EDIT]

Когда я двигаю код так:

foreach ($orders AS $order_id => $order) { 
     $html .= '<tbody><tr><td rowspan="' . count($order) . '">' . $order_id . '</td>'; 
     $row = 1; 
     foreach ($order AS $item => $data) { 
      if ($row > 1) { $html .= '</tr><tr>'; } 
      $html .= '<td>' . $item . '</td>'; 
      $html .= '<td>' . $data['quantity'] . '</td>'; 
      $html .= '<td>' . $data['one_product_price'] . '</td>'; 
      $row++; 
     } 
     $html .= '<td rowspan="' . count($order) . '">' . $data['status'] . '</td>'; 
     $html .= '</tr><tbody>'; 


----------------------------------------------------------------------- 
id_cart   products  quantity  invoices  status 
----------------------------------------------------------------------- 
       this    2    $20   
       -------------------------------------------------------  
    0001   that    1    $20   
       -------------------------------------------------------  
       those    2    $20  pending 
----------------------------------------------------------------------- 
           Total Invoices: $60 
----------------------------------------------------------------------- 
       this    2    $20   
       -------------------------------------------------------  
    0002   that    1    $20   
       -------------------------------------------------------  
       those    2    $20  approved 
----------------------------------------------------------------------- 
           Total Invoices: $60 

resultin столбец состояния в в самом низу TBODY. Я хочу, чтобы это как столбец id_cart.

+0

Вы можете повторить вывод HTML? Я думаю, что это ряды. – Gudgip

+0

Почему вы добавляете столбец «rowspan» в столбец STATUS? Вы хотите информацию о статусе для каждой продукции, не так ли? –

+0

@trzEm, Нет, это не то, что я хочу. – klaudia

ответ

-1

Вам нужно 1 значение статуса на т, поэтому поставьте его вне своей петли. Кроме того, поскольку вы повторно используете $order, я поместил count($order) в отдельную переменную. Кроме того, закройте тег </tbody>.

foreach ($orders AS $order_id => $order) { 
     $orderCount = count($order); 
     $html .= '<tbody><tr><td rowspan="' . $orderCount . '">' . $order_id . '</td>'; 
     $row = 1; 
     foreach ($order AS $item => $data) { 
      if ($row > 1) { $html .= '</tr><tr>'; } 
      $html .= '<td>' . $item . '</td>'; 
      $html .= '<td>' . $data['quantity'] . '</td>'; 
      $html .= '<td>' . $data['one_product_price'] . '</td>'; 
      if ($row == 1) 
       $html .= '<td rowspan="' . $orderCount . '">' . $data['status'] . '</td>'; 
      $row++; 
     } 
      $html .= '</tr></tbody>'; 
    } 
+0

Я пробовал, но этот статус находится на самой нижней части тела. Я хочу, чтобы он был похож на столбец id_card. Посмотрите на мой вопрос с обновлением. – klaudia

+0

Я отредактировал свой вопрос, поставив 'count ($ order)' в отдельную переменную. – Gudgip

+0

ничего не меняет – klaudia

-1

Используйте атрибут valign для элемента td, чтобы получить выравнивание по центру центра по вертикали.

$html .= '<td rowspan="' . $orderCount . '" valign="middle">' . $data['status'] . '</td>'; 

Надеюсь, что это сработает для вас.

-1

Проверьте это:

foreach ($order AS $item => $data) { 
     if ($row > 1) { $html .= '</tr><tr>'; } 
     $html .= '<td>' . $item . '</td>'; 
     $html .= '<td>' . $data['quantity'] . '</td>'; 
     $html .= '<td>' . $data['one_product_price'] . '</td>'; 
     if($row == 1) 
     { 
     $html .= '<td style="vertical-align: middle" rowspan="' . count($order) . '">'. $data['status'] . '</td>'; 
     } 
     $row++; 
    } 
+0

Html выглядит как http://jsfiddle.net/owbpvuws/ –

+0

Вертикальное выравнивание не должно быть необходимым (попробуйте его в jsfiddle). Также чище вывести последнюю строку из цикла. – Gudgip

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