Yüklü Baskı satırlar tablo var?

4 Cevap php

Basit bir soru.

Ben tarihe göre gruplandırılmış satırları toplayan bir sorgu var. Temelde, bir günde kaç üyelik başvurusu sayar ve gün sonuçları gün yazdırır. Hiçbir uygulamalar bir günde varsa doğal olarak, bu 15 ve 17 aşağıda örnek hiçbir uygulamaları vardı (bu satır görünmüyor .....

Date         |    Applications
-----------------------------------
12/01/2010   |   44
13/01/2010   |   73
14/01/2010   |   66
16/01/2010   |   102
18/01/2010   |   12
19/01/2010   |   22

Hiçbir uygulamaları varken gün yok atlanır ve böylece, gün boyunca tarihi ve 0 yazdırmak gerekiyor. Bunu nasıl herhangi bir fikir. Ben yılın her günü ile bir tabloya katılma düşündüm, ama bu overkill görünüyor

Sorgu altında

SELECT
application_date AS Date,
COUNT(*) AS Applications 
FROM members
GROUP BY ap_date 

4 Cevap

Bu another question on SO çok benzer. Genel bir fikir birliği gibi görünüyor:

  1. Programın uygulama katmanında Boş doldurun.
  2. , Geçici bir tablo oluşturmak tarihleri ​​ile doldurun ve geçici masaya katılmak.

En iyi seçenek, # 1 - bu az kıvrık ve düşük yükü olmalıdır.

Söz konusu tarih aralığında seçin. Ardından geçerli satır eşleşen görmek isteyen, tarih aralığı boyunca yineleme. Öyle değilse o zaman çıkış 0. Sonraki satıra çıktı sonra uygun sayıda ve avans yaparsa.

Ben bir PHP dizi yaratacak ve dizi dizin bir dize, tarih olur, ben bu formatı YYYY-AA-GG tercih ve ben böyle bir şey yapacağını (not anahtarın tarih biçimi önemlidir)

// how far in the past to go
$days_in_the_past = 365;
// default to today, unix timestamp file
$start_day = time();

// the array that contains all out dates
$dates = array();

// sec * min * hours
$secs_in_a_day = 60 * 60 * 24;

// note we're going backwards here
for ( $i=0; $i <= $days_in_the_past; $i++ )
{
    $key = date('Y-M-D', ($start_day - ($secs_in_a_day * $i)));
    // this sets the format of   2010-01-21   as the key
    $dates[$key] = "";
}

$query = 'SELECT date, app FROM table';
$result = mysql_query($query);
while ( $row = mysql_fetch_assoc($result) )
{
    $key = date('Y-M-D', strtotime($row['Date']));
    $dates[] = $row['Applications'];
}

Sırayla tarihleri ​​istiyorsanız, sadece diziyi sıralamak.

Sadece bir yıl içinde tüm tarihleri ​​listeleyen bir tablo oluşturmak için overkill değil; Bir helper table denir, ve bu sorgu (ve bunun gibi bir sürü) çok kolay yapabilirsiniz.