Помогите с циклом вывода недостающих дат.

Тема в разделе "PHP", создана пользователем anoden, 4 июн 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. anoden

    anoden Писатель

    Регистр.:
    3 мар 2012
    Сообщения:
    8
    Симпатии:
    0
    Есть такой код:
    Код:
    $ref_count = mysql_query("SELECTDATE_FORMAT(FROM_UNIXTIME(reg_date), '%d-%m-%Y') AS regdate, count(*)
    FROM users
    WHERE referral='".$_SESSION['id']."' AND reg_date <= UNIX_TIMESTAMP(NOW()) AND reg_date >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY))
    group by DATE_FORMAT(FROM_UNIXTIME(reg_date), '%d-%m-%Y')
    order by reg_date desc");
     
    echo '<table width="100%" border="0" cellpadding="2" id="ref_table" cellspacing="0" class="table_ref2">
                  <tr class="sites_table">
                    <td>Дата</td>
                    <td><b>Регистраций</b></td>
                  </tr>';
     
    while ($ref_group = mysql_fetch_assoc($ref_count)){
    print'<tr>
    <td class="title_text_tbl">'.$ref_group['regdate'].'</td>
    <td class="title_text_tbl">'.$ref_group['count(*)'].'</td>
    </tr>';
    }
    цель вывести количество регистраций сгруппированных по датам, но есть проблема, если регистраций в какой либо день не было, то эти дни пропускаются при выводе в таблицу, а хотелось бы избежать этого и чтобы в столбце Регистраций стоял "0". В раздел баз данных посоветовали сделать подцикл в цикле while который проверял бы недостающие даты и выводил их в таблицу, но все мои попытки найти решения ни к чему не превели. Заранее спасибо.
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    например перед запросом сгенерировать массив с датами и нулями, потом обновить массив данными из базы
    PHP:
    <?
    //пустой массив
    $data = array();
    for(
    $i=0;$i<7;$i++){
        
    $data[date("d-m-Y"mktime(000date("m"), date("d")-$idate("Y")))] = 0;
    }
     
    //заполняем пустой массив датами что есть
    $ref_count mysql_query("SELECTDATE_FORMAT(FROM_UNIXTIME(reg_date), '%d-%m-%Y') AS regdate, count(*)
    FROM users
    WHERE referral='"
    .$_SESSION['id']."' AND reg_date <= UNIX_TIMESTAMP(NOW()) AND reg_date >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY))
    group by DATE_FORMAT(FROM_UNIXTIME(reg_date), '%d-%m-%Y')
    order by reg_date desc"
    );
    while (
    $ref_group mysql_fetch_assoc($ref_count)){
        
    $data[$ref_group['regdate']] = $ref_group['count(*)'];
    }
     
    //печатаем
    echo '<table width="100%" border="0" cellpadding="2" id="ref_table" cellspacing="0" class="table_ref2">
                  <tr class="sites_table">
                    <td>Дата</td>
                    <td><b>Регистраций</b></td>
                  </tr>'
    ;
     
    foreach(
    $data as $date=>$count){
    print
    '<tr>
    <td class="title_text_tbl">'
    .$date.'</td>
    <td class="title_text_tbl">'
    .$count.'</td>
    </tr>'
    ;
    }
     
    latteo и anoden нравится это.
Статус темы:
Закрыта.