CodeIgniter лучший поток сценариев для запросов - PullRequest
0 голосов
/ 05 августа 2010

У меня есть следующие данные:

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 ]

1 голос
/ 05 августа 2010

Кристоффер прав, что вы должны поместить свою обработку данных в модели, свою бизнес-логику в контроллеры и свои представления в представлениях.

Подробнее об этом см. Страницу CI MVC , их страница контроллера , их страница модели и их страница просмотра . Вы можете поверить нам, что использование 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 (агрегат) см. эту страницу из MySQL .

0 голосов
/ 05 августа 2010

CI основан на паттерне MVC , если вы сделаете это по-своему (без CI), то в первую очередь победит цель использования CI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...