如何显示查询中的数据 - 数据库表之间的一对多关系

时间:2015-06-29 06:20:28

标签: codeigniter one-to-many

我试图从查询中显示数据,但我无法按原样显示数据。 我在数据库中的表格是:ordersheaderorderitems。这是他们之间的一对多关系。一个订单头有很多订单。他们加入了ON idOrder。 ordersheader中的一个idOrder对应orderitems中的多行。 我必须显示当前日期的所有订单,并显示每个idOrder的所有订单项。对于所有订单,它应该是这样的:

http://prntscr.com/7lwoan

第一行是订单 - 必须显示此订单的所有订单项,当您点击Details时,必须在单独的行上显示每个订单项。 现在,正如我使用下面的代码,每个订单项都显示在单独的行上。如何使它看起来像上面的链接?谢谢! 我的模特是:



 function getOrders(){
    $date = new DateTime("now");
 
    $curr_date = $date->format('Y-m-d ');
    $this->db->select('ordersheader.*,customer.name,orderitems.*');
    $this->db->from('ordersheader'); 
    $this->db->join('orderitems', 'orderitems.idOrder = ordersheader.idOrder');
    $this->db->join('customer', 'customer.idCustomer = ordersheader.idCustomer');
    $this->db->where('DATE(orderDueDate)', $curr_date);   

    $query = $this->db->get();
    return $query->result();
    
    }




我的观点是:



<?php
 if($orderlist){
foreach($orderlist as $row) {
 ?> <tr class="overview">
                        <td><?php echo $row->idOrder; ?></td>
                        <td class="text-center"><img src="<?= base_url();?>/assets/images/tick.png"></td>
                        <td><?php echo $row->name; ?></td>
                        <td><?php echo $row->eggSize; ?></td>
                        <td><?php echo $row->quantity; ?></td>
                        <td>
                            <div class="progress">
                                <div class="progress-bar" role="progressbar" style="width: 60%;">
                                    60%
                                </div>
                            </div>
                        </td>
                        <td>18:00</td>
                        <td><button type="button" class="btn btn-link btn-xs view-full-order">Full</button></td>
                    </tr> 
                    <tr class="full hide">
                        <td></td>
                        <td></td>
                        <td></td>
                        <td><?php echo $row->eggSize; ?></td>
                        <td><?php echo $row->quantity; ?></td>
                        <td>
                            <div class="progress">
                                <div class="progress-bar progress-bar-info" role="progressbar" style="width: <?php echo $rand; ?>%;">
                                  <?php echo $rand; ?>%  
                                </div>
                            </div>
                        </td>
                        <td>14:00</td>
                        <td></td>
                    </tr>
 <?php } } ?>
             </tbody></table>
&#13;
&#13;
&#13;

编辑:我用group_concat制作并爆炸。但现在问题是,对于每个idOrder,我应该计算所有orderitems的平均rand(这是进度条的值)。这应该是针对每个订单 - 订单的总和。现在,计算不正确。 它现在看起来像是:

http://prntscr.com/7mu0k3 Billa的这一行应该是接下来2行的平均值。 我的观点是:

&#13;
&#13;
<tbody class="client">
            <?php 
            if ($orderlist) {
                foreach ($orderlist as $row) {
                    $i = 0;

                    ?> <tr class="overview">
                        <td><?php echo $row->idOrder; ?></td>
                        <td class="text-center">
                            <?php
                             $s = $row->eggSize; 
                    $egg_size_array = explode(",", $row->eggSize);
                    $quantity_array = explode(",", $row->quantity);
                    
                    if (!empty($egg_size_array))
                        foreach ($egg_size_array as $key => $value) {
                            $rand[$key] = rand(1, 100);
                            $random_hour[$key] = rand(01, 24);  
                          
                        }
?>                      
                            
                        </td>
                        <td><?php echo $row->name; ?></td>
                        <td><?php echo $row->eggSize; ?></td>
                        <td><?php
                            $s = $row->quantity;
                            $s = explode(',', $s);
                            echo array_sum($s);
                         print_r($rand);  echo "<br>";print_r(array_sum($rand)); echo "<br>";   print_r(count($egg_size_array));
                            ?></td>
                        <td>
                            <div class="progress">
                            
                                <div class="progress-bar" role="progressbar" style="width: <?php 
                                echo array_sum($rand)/ count($egg_size_array); ?>%;">
                                     
                                      
                                <?php  echo array_sum($rand)/ count($egg_size_array); echo "%";  ?>

                                </div>
                            </div>
                        </td>
                        <td><?php echo max($random_hour); echo " ч."; ?></td>
                        <td><button type="button" class="btn btn-link btn-xs view-full-order">
                    <?php echo lang('details'); ?>  </button></td>
                    </tr> 
                    <?php
                   
                    if (!empty($egg_size_array))
                        foreach ($egg_size_array as $key => $value) {
                            // $rand = rand(1, 100);
                            //$random_hour = rand(01, 24);
                            ?>
                            <tr class="full hide">
                                <td></td>
                                <td></td>
                                <td></td>
                                <td> 
                <?php echo $value; ?></td>
                                <td><?php echo $quantity_array[$key]; ?></td>
                                <td>
                                    <div class="progress">
                                        <div class="progress-bar progress-bar-info" role="progressbar" style="width: <?php echo $rand[$key]; ?>%;">
                <?php echo $rand[$key]; ?>%  
                                        </div>
                                    </div>
                                </td>
                                <td><?php echo $random_hour[$key] . ' ч.' ?></td>
                                <td></td>
                            </tr>
                            <?php
                        }
                    ?><?php
                }
            }
            ?>
        </tbody></table>
&#13;
&#13;
&#13;

我的模特是:

&#13;
&#13;
  function getOrders(){
        $date = new DateTime("now");
        $curr_date = $date->format('Y-m-d');
        $this->db->select('orderitems.eggSize as size');
        $this->db->select('ordersheader.*,customer.name,GROUP_CONCAT(orderitems.itemNumber) as itemNumber');
        $this->db->select('ordersheader.*,customer.name,ordersheader.*,customer.name,GROUP_CONCAT(orderitems.quantity ) as quantity ');
        $this->db->select('ordersheader.*,customer.name,ordersheader.*,customer.name,GROUP_CONCAT(orderitems.unitPrice) as unitPrice');
        $this->db->select('ordersheader.*,customer.name,ordersheader.*,customer.name,GROUP_CONCAT(orderitems.eggSize ) as eggSize');
        $this->db->from('ordersheader'); 
        $this->db->join('orderitems', 'orderitems.idOrder = ordersheader.idOrder');
        $this->db->join('customer', 'customer.idCustomer = ordersheader.idCustomer');
        $this->db->where('DATE(orderDueDate)', $curr_date);
        $this->db->group_by('orderitems.idOrder');
        $query = $this->db->get();
        return $query->result();
    }
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您应该创建一个函数来返回订单子项。

function GetItems($idOrder)
{
    return $this->db->get_where("orderitems", "idOrder" => $idOrder)->array_result();
}

之后,您将使用orderitems表删除JOIN。然后你应该得到你的查询的array_result并通过foreach迭代它并将这些子项附加到你的集合中,如下所示:

$curr_date = $date->format('Y-m-d ');
$this->db->select('ordersheader.*,customer.name');
$this->db->from('ordersheader'); 
$this->db->join('customer', 'customer.idCustomer = ordersheader.idCustomer');
$this->db->where('DATE(orderDueDate)', $curr_date);   

$query = $this->db->get()->array_result();

$index = 0;

foreach($query as $item)
{
    $query[$index]["children"] = GetItems($item->idOrder);
    $index++;
}

我在小提琴中创建了一个模型,向您展示一个示例:http://codepad.org/LfjQJQCP