CodeIgniter更好的Query脚本流程

时间:2010-08-05 08:53:23

标签: php mysql codeigniter

我有以下数据:

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 个答案:

答案 0 :(得分:1)

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

有关详情,请参阅CI的MVC page,他们的Controller page,他们的Model page及其View page。你会在这里相信我们,以老式的方式使用PHP会让你感到很头疼。 MVC设计模式是要走的路。在你走得更远之前,你需要了解它。如果这些页面对您没有帮助,请搜索“codeigniter mvc help”或教程或视频或其他内容。

无论如何......关于你的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(聚合)函数的更多信息,请参阅this page from MySQL

答案 1 :(得分:0)

CI基于MVC模式,以你自己的方式(没有CI)做到会破坏首先使用CI的目的