Uzun zamandır PHP ile bir arşiv bölümü oluşturmak istiyordum. Şimdi zaman bulunca henuz yapmaya başladım. Arşiv düşünmemin tek nedeni pek çok kişi gibi bir .htaccess oluşturup bu .htaccess ile arama motorlarını arşive yönlendirmek değil kesinlikle. Amaç tarihsel olarak, sitedeki mesajların düzenli şekilde gösterilmesi.
Aklımdaki olay arşive girince ilk önce senelerin çıkması.
Ama senelerin çıkması için mesaj atımlarının hangi tarihte başlayıp hangi tarihte bittiğini tesbit etmem gerekiyor bunun için çok basit bir işlem kullandım.
// Sorgu 1
$sorgu=mysql_query("SELECT topic_id, topic_time FROM `topics` ORDER BY `topic_time` DESC LIMIT 1");
while($sonuc=mysql_fetch_assoc($sorgu)):
$buyuk_zaman = $sonuc['topic_time'];
endwhile;
// sorgu 2
$sorgu=mysql_query("SELECT topic_id, topic_time FROM `topics` ORDER BY `topic_time` ASC LIMIT 1");
while($sonuc=mysql_fetch_assoc($sorgu)):
$kucuk_zaman = $sonuc['topic_time'];
endwhile;İki sorguda aynı işlemi yapıyor topic yani mesaj tarihlerine bakıyor. Ama biri ASC ile biride DESC ile bakıyor böylece sitede atılan ilk mesaj tarihini ve son mesaj tarihini çekebiliyorum.
Bu arada detaylı anlatıyorum ki, benzer bir şey yapmak isteyenler için örnek olsun.
Ama aklıma burada bir şey geliyor 2 sorgu yapıyorum. Acaba en düşük topic_time ile en yüksek topic_time değerlerini tek sql sorgusu ile nasıl alabilirim ?
İlerleyelim, iilk ve son tarihler elimde olduğu için seneleri php time fonksiyonları ile tesbit edip bir for döngüsü içerisine atarak for içerisinde seneleri gösteriyor.
Burada hiç bir sıkıntı yok,
Fakat sizce bir arşiv nasıl olmalı ?
a- İlk önce senelere girip ardından aylara mı girelim ve seçilen ayın içindeki mesajlar çıksın ?
b - İlk önce senelere girip, ardından hangi seneye girilmişse o sene içindeki mesajlar mı çıksın ?
Yani işin içine ayları katmalımıyım ?
Ben şu an direk Seneleri gösteriyorum ve hangi seneye tıklanırsa örneğin 2006, o sene içindeki tüm mesajlar sayfada çıkıyor.
Bunun için strtotime ile şöyle bir kod kullanıyorum
// Bu ayın son günü örn 31
$son_gun = date("t",time());
// Bu senenin ilk günü ve ilk saati
$sene_ara1 = strtotime('01.01.'.$sene.' 00:00');
// Bu seninin son günü ve son saati
$sene_ara2 = strtotime($son_gun . '.12.'.$sene.' 23:59');SQL sorgusu içerisinde büyük tür ve küçüktür kullanarak iki değer arasını gayet rahat şekilde çekebiliyorum.
Ayları henuz eklemedim, çünki time fonksiyonu ile daha fazla oynamam gerekecek ve yeni sql sorguları olacak. Yinede yapsam mı diye düşünüp hatta denemek de istiyorum.
Dahası henuz iki time stapm değeri arasındaki ayları nasıl çıkartabilirim bunun içinde kafamda birşeyler oluşmadı.
Yani mesela elimde
1167712673 var tarihsel olarak 02 Ocak 2007 Salı.
Birde elimde
1186553661 olduğunu düşünelim, tarihsel olarak 08 Ağustos 2007 Çarşamba
Bu iki time stamp arasındaki ayları (ocaktan ağustosa kadar, ama time stamp değerleri o an ne ise) nasıl bir döngü ile sayfaya basabilirim ?
Sizlerinde konu hakkında görüşünü almak isterim. Sizce bir arşiv sayfası nasıl olmalı ? Nelere dikkat edilmeli ? Ayrıca iki tarih arası ayları nasıl basabilirim ?