首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter MYSQL join返回为单条记录?

Codeigniter MYSQL join返回为单条记录?
EN

Stack Overflow用户
提问于 2014-05-05 16:20:36
回答 1查看 316关注 0票数 1

我正在尝试在应用程序中显示一个漂亮的“我的订单”页面-页面列表中的每个订单都在一个框中,旁边是按顺序排列的所有项目。这是通过连接三个表(Orders,Items,Products)完成的,items表有一个product_id和一个order_id等。这里的一个章节帮助我编写了原始代码,下面是模型函数的代码:

代码语言:javascript
复制
function get_all_orders() {
    $this->db->select('o.*,p.*,i.*,o.order_id AS order_id,p.product_id AS product_id, i.item_id as item_id');
    $this->db->from('Orders o');
    $this->db->join('Items i','o.order_id = i.order_id','left');
    $this->db->join('Products p','p.product_id = i.product_id','left');
    $this->db->order_by('o.order_id', 'desc');   
    $query = $this->db->get();
    return $query->result();                  

}

这会将每一行作为单独的结果返回,因此我在视图中使用类似以下内容来分隔orders…

代码语言:javascript
复制
$currentParent = false;
foreach ($orders as $o) {
    if ($currentParent != $o->order_id) {
        echo '<h1>ORDER NUMBER ' . $o->order_id . '</h1>';
        $currentParent = $o->order_id;
    }
    echo '<p>' . htmlentities($o->product_name) . '</p>';
}

但现在我在尝试使用Codeigniter分页函数时遇到了问题,该函数需要知道返回的记录(订单)的总数,以便计算链接,但一个订单框可能是5个记录(1个订单记录,然后是4个项目),因此它不起作用。

我认为从视图…中调用items查询非常容易(但很糟糕)所以我不想这么做。我在想,一定有一种方法可以将SQL结果转换为更合适的数组结构,其中每个order都包含一个带有项…的子数组但是我不知道如何在MYSQL中做到这一点,或者如何在视图中以正确的方式返回它。

真的有点卡住了--有没有人以前在这里/做过,想告诉我我的方式的错误?

EN

回答 1

Stack Overflow用户

发布于 2014-05-05 17:33:29

您可以使用,它会用逗号分隔与某个特定订单相关的所有产品,但在此之前使用过

要注意这一事实,它默认限制为1024个字符,但可以增加,这是在手册中定义的

代码语言:javascript
复制
function get_all_orders() {
    $this->db->select('o.*,o.order_id AS order_id,
    GROUP_CONCAT(p.product_name ORDER BY p.id) products,
    GROUP_CONCAT(p.id ORDER BY p.id) product_ids
   ',FALSE);
    $this->db->from('Orders o');
    $this->db->join('Items i','o.order_id = i.order_id','left');
    $this->db->join('Products p','p.product_id = i.product_id','left');
    $this->db->group_by('o.order_id');   
    $this->db->order_by('o.order_id', 'desc');   
    $query = $this->db->get();
    return $query->result();
}

然后,从上面的查询中,您可以使用explode函数获得产品,从上面的查询中,您可以获得所需的所有订单的计数,以便使用CI的分页类,现在在您的视图中,您的数据表示代码如下所示

代码语言:javascript
复制
foreach ($orders as $o) {        
    echo '<h1>ORDER NUMBER ' . $o->order_id . '</h1>';
    $products=explode(',',$o->products);
    if(!empty($products)){
      foreach ($products as $p) {
            echo '<p>' . htmlentities($p) . '</p>';
      }
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23467925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档