代码之家  ›  专栏  ›  技术社区  ›  ariefbayu

CodeIgniter更好的用于查询的脚本流

  •  0
  • ariefbayu  · 技术社区  · 14 年前

    我有以下数据:

    promo_id    date    time    reg_cnt notes
    2760    2010-06-02  01:30:00    2   -
    2760    2010-06-02  05:30:00    2   -
    2760    2010-06-03  07:00:00    1   -
    2760    2010-06-03  07:30:00    2   -
    2760    2010-06-03  08:30:00    3   -
    2760    2010-06-04  09:00:00    1280    promo from vendor xxx
    2760    2010-06-04  09:30:00    6   -
    2760    2010-06-04  10:00:00    3   -
    2760    2010-06-04  10:30:00    5434    TVC program xxx
    

    我需要像这样显示:

    PROMO   DATE    REG CNT NOTES
    2760    2010-06-02  4   -
    2760    2010-06-03  6   -
    2760    2010-06-04  6723    promo from vendor xxx, TVC program xxx
    

    我想不出获取这些数据的简单方法。 现在,我在我的模型上做了类似的事情:

    $data = array();
    $query = $this->db->query("SELECT promo_id, date, SUM(reg_cnt) AS reg_cnt FROM promo_signup");
    foreach( $query->result_array() as $q ){
        $data[ $q['promo_id'] . '-' . $q['date'] ] = $q;
        $query2 = $this->db->query("SELECT notes FROM promo_signup WHERE date = '" . $q['date'] . "' AND promo_id = '" . $q['promo_id'] . "'");
        $data2 = array();
        foreach( $query2->result_array() as $q2 ){
            $data2[] = $q2['notes'];
        }
        $data[ $q['promo_id'] . '-' . $q['date'] ]['notes'] = $data2;
    }
    

    那么,我还是要循环通过 $data 在我的视图上显示它。

    与下面的代码相比,我想这是浪费处理能力(如果我在没有CI的情况下这样做的话):

    $data = array();
    $query = $this->db->query("SELECT promo_id, date, SUM(reg_cnt) AS reg_cnt FROM promo_signup");
    foreach( $query->result_array() as $q ){
        $data[ $q['promo_id'] . '-' . $q['date'] ] = $q;
        $query2 = $this->db->query("SELECT notes FROM promo_signup WHERE date = '" . $q['date'] . "' AND promo_id = '" . $q['promo_id'] . "'");
        $data2 = array();
    
        //echo data here
    
        foreach( $query2->result_array() as $q2 ){
            $data2[] = $q2['notes'];
    
            //echo notes data here
    
        }
    }
    

    那么,在CI中有更好的方法吗?

    如果你们在上面的代码中发现了一些错误,我很抱歉,因为这只是概念代码。

    2 回复  |  直到 14 年前
        1
  •  1
  •   treeface    14 年前

    Kristoffer是正确的,您应该将数据处理放在模型中,将业务逻辑放在控制器中,将视图放在视图中。

    有关更多信息,请参阅CI MVC page 他们的 Controller page 他们的 Model page 和他们的 View page . 在这里,您会希望我们相信,使用PHP这种老式的方法会让您头疼。MVC设计模式 是去的路吗 . 在你进一步研究之前,你需要理解它。如果这些页面对您没有帮助,请四处搜索“CodeIgniter MVC帮助”或教程或视频或其他内容。

    不管怎样…关于你的MySQL问题。试试这个:

    SELECT promo_id, date, SUM(reg_cnt) AS reg_cnt, GROUP_CONCAT(DISTINCT notes SEPARATOR ', ') AS notes FROM promo_signup GROUP BY date
    

    有关group by(aggregate)函数的更多信息,请参见 this page from MySQL .

        2
  •  0
  •   Kristoffer Sall-Storgaard ProllyGeek    14 年前

    CI基于 MVC 模式,以您的方式(不使用CI)执行此操作会首先破坏使用CI的目的。