【问题标题】:Retrieve data for display in a specific format [closed]检索数据以特定格式显示[关闭]
【发布时间】:2017-07-21 22:28:35
【问题描述】:

我有两个 mysql 表 orderorderitems
现在我想在单独的监视器上使用 angularjs 显示这些数据。
我的表结构:
order 包含 id, table_id, date_time
orderitems 包含order_id, food_item, item_qty, dalivery

现在我想在单独的 html div 中显示这些数据。 table_id 作为标题,orderitems 作为内容。

为此,我想要这样的数据结构

[{
 table_id,
 date_time,
 items: [
    {
   food_item,
   item_qty,
   delivery
},
{
   food_item,
   item_qty,
   delivery
}
]
}]


那么如何使用 codeigniter 或 MySQL 进行查询呢?

【问题讨论】:

    标签: php mysql angularjs codeigniter


    【解决方案1】:

    您可以选择所有订单商品及其订单数据

    这是一个 Mysqli 解决方案

    $mysqli = new mysqli("example.com", "user", "password", "database");
    
    $query = " SELECT * FROM order LEFT JOIN  orderitems ON order.id = orderitems.order_id ";
    $stmt = $mysqli->prepare($query);
    !$stmt ? die('error') : "";
    $stmt->execute();
    $result = $stmt->get_result();
    
    
    while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
        if($lastOrderId != $row['id']){
            if($order){
                $finalArray[] = $order;
            }
            $lastOrderId = $row['id'];
            $order = new \stdClass();
            //$order->id = $row['id'];
            $order->table_id = $row['table_id'];
            $order->date_time = $row['date_time'];
            $order->items = [];
        }
        if($row['food_item']){
            $orderItem = new \stdClass();
            $orderItem->food_item = $row['food_item'];
            $orderItem->item_qty = $row['item_qty'];
            $orderItem->dalivery = $row['dalivery'];
            $order->items[] = $orderItem;
        }
    }
    //last order in loop
    if($order){
        $finalArray[] = $order;
    }
    print_r($finalArray) ;
    exit;
    

    尝试现场演示 (https://eval.in/835997)

    此演示依赖虚假数据进行测试

    $row1 = ["id"=>1,"table_id"=>5,"date_time"=>"2017-12-31","food_item"=>1,"item_qty"=>1,"dalivery"=>"yes"];
    $row2 = ["id"=>1,"table_id"=>5,"date_time"=>"2017-12-31","food_item"=>2,"item_qty"=>2,"dalivery"=>"no"];
    $row3 = ["id"=>2,"table_id"=>5,"date_time"=>"2017-12-31","food_item"=>3,"item_qty"=>3,"dalivery"=>"yes"];
    $row4 = ["id"=>2,"table_id"=>5,"date_time"=>"2017-12-31","food_item"=>4,"item_qty"=>4,"dalivery"=>"no"];
    
    $rows = [$row1, $row2, $row3, $row4]; 
    

    这个输出

    Array
    (
        [0] => stdClass Object
            (
                [table_id] => 5
                [date_time] => 2017-12-31
                [items] => Array
                    (
                        [0] => stdClass Object
                            (
                                [food_item] => 1
                                [item_qty] => 1
                                [dalivery] => yes
                            )
                        [1] => stdClass Object
                            (
                                [food_item] => 2
                                [item_qty] => 2
                                [dalivery] => no
                            )
                    )
            )
        [1] => stdClass Object
            (
                [table_id] => 5
                [date_time] => 2017-12-31
                [items] => Array
                    (
                        [0] => stdClass Object
                            (
                                [food_item] => 3
                                [item_qty] => 3
                                [dalivery] => yes
                            )
                        [1] => stdClass Object
                            (
                                [food_item] => 4
                                [item_qty] => 4
                                [dalivery] => no
                            )
                    )
            )
    )
    

    【讨论】:

    • 谢谢兄弟,这正是我所做的!我也使用了array_push()。
    • @Rifthy 不客气 :)
    【解决方案2】:

    使用Codeigniter。 PDO 可能相同。

    $data = array();
            $tables = $this->db->select('table_data.*, order.id As order_id, order.date_time')
                                ->join('order', 'order.table_id = table_data.id')
                                ->where('order.status', 'Pending')
                                ->get('table_data')->result_array();
            foreach ($tables as $table) {
                $items = $this->db->select('orderitems.food_item, orderitems.item_qty')
                                    ->where('order_id', $table['order_id'])
                                    ->get('orderitems')->result_array();
                array_push($data, array('details' => $table, 'items' => $items));
            }
            $this->response($data); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-04
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2013-08-02
      相关资源
      最近更新 更多