Doğru Cevap
-
Selam; sanırım bu işini görür;
$buay=date('m'); // iki haneli veya tek haneli kısa uzun ad vs. VT de nasılsa öyle çekersin bunları $buay=date('Y'); $sorgu = mysql_query("SELECT * FROM haberler WHERE ay='$buay' AND yil='$buyil'"); // bu yıla ve bu aya ait tüm kayıtlar gelir
-
sharq
Bu ayın deil bu haftanın kayıtlarını gösterme olacak :S11 yıl önce yazılmış
-
Cevaplar
-
Bu ayın deil bu haftanın kayıtlarını gösterme olacak :S
-
reelmg
ilk soruda ay demişsin :)
hafta istediğine göre artık ayın önemi yok değilmi sonuçta haftanın ilk üç günü 29-30-31 ocak ken son 4 günü şubata gelebilir ve VT yapını değiştirmen mümkünmü bir date tipinde alan ile daha gun ay yıldan çok daha iyi sonuçlar alabilirsin bunları açıklarsan yardımcı olmaya çalışırım11 yıl önce yazılmış -
sharq
ynlş yazmışım bşlığı :S
şimdi ypmak istediğim şey bu hafta keydedilen haberleri ekrana bastırmak
yani bugün ayın 16'sı 16'sından 7 gün öncesi 16-15-14-13-12-11.05.2012 nin haberlerini
ama bugün ayın 4'ü olsaydı
4-3-2-1-31-30-29.05-06.2012 burda program patlıyor işte yani bi önceki tarihe geçse o 3 günü göstercek falan ypmak istediğimi anlata bildim galiba??11 yıl önce yazılmış -
reelmg
gun ay yil alanlarını kaldırıp date tipinde haber_tarihi isimli tek bir alan oluşturma imkanın varmı daha işin başında isen hemen boyle değiştir. Böylece mktime ile bir kaç satırda halledilebir üstelik gelecekteki tüm sorgularında da işe yarar. Değiştiremeyecek durumdaysan ona göre birşeyler düşünürüz11 yıl önce yazılmış -
sharq
sıkıntı olmaz veritabanını ve admin panelini deyiştiririm gun-ay-yil kalır bide üstüne ek olarak dediğini ekleriz haberi çeknce tarihini gün-ay-yildan weirirm bu tarz bu hafta bugün dün buay gibi işlmleride dediğingibi yaparız da şimdi ne deyişiklikler yapacağım veritabanında?? ve tarihi admin panelinden eklerken nasıl ekleyeceğim?11 yıl önce yazılmış -
sharq
??11 yıl önce yazılmış -
reelmg
VT de haber_tarihi diye bir alan aç tipini DATE yap
adminden haberi eklerken bu alana veriyi YYYY-AA-GG şeklinde ekle
sorgu yaparkende;
$baslangic_gunu = date("Y-m-d", mktime (0,0,0,date("m"),date("d")-7,date("Y"))); // buradaki mktime komutunda güne verdiğimiz -7 değeri ile bu günkü tarihten 7 gün geriye gidiyoruz. $sorgu = mysql_query("SELECT * FROM haberler WHERE haber_tarihi>'$baslangic_gunu'");
kolay gelsin11 yıl önce yazılmış -
sharq
peki bunda dün bu hafta ve bu ay'ı nasıl yapacağız?11 yıl önce yazılmış
-
-
Database yapın çok karışık gün ay yılı ayrı tutmak yerine sadece timestamp tutsan hem gün ay yıl karşılaştırması çok kolay olacaktı hemde bu kadar sütun işgal etmezdin. Aklıma bir yöntem geliyor ama denemeden emin olamayacam. Öncelikle yıl ay gün ile bir düzene sokabilirsin cancat_ws('-',yil,ay,gun) sonra concat(' 00:00:00') en sonunda da unix_timestamp() ile şu anki timesmapı bulursun bundanda bir hafta öncesini çıkartırsan gerekli kayıtlar gelebilir.
SELECT haberler.*, UNIX_TIMESTAMP(CONCAT(CONCAT_WS('-',haberler.yıl,haberler.ay,haberler.gun),' 00:00:00')) AS time_stamp FROM haberler WhERE time_stamp > time_stamp-(60*60*24*7)
Eğer özellikle 1 haftalık kayıtlar lazımsa between kullanabilirsin-
sharq
gun ay yıl'ı kaldırdım habertarihi ekledim mktime ile yptrıyorum artık yani bu haftalık ı düzenledim ama bu ay ı nasıl çekebilirim?11 yıl önce yazılmış -
Kesali
:D Sql i yazarken elli yere cevap verdiğim için cevapları göremedim bile.
Yukardaki arkadaş doru cevabı vermiş -7 yerine -30 yap o kadar.11 yıl önce yazılmış -
sharq
:) ginede saol cevabın için başka arkadaşlaın da gözüne çarpar veritabanını deiştiremicekler için :)
ayda mı 30 ypcam yoksa haftalıktamı11 yıl önce yazılmış -
reelmg
mktime komutunu kullanırken benim verdiğim cevapta -7 değeri olan yer bu günden ne kadar geri gitmek istediğini belirttiğin nokta eğer tam bir ay geri gitmek istiyorsan -7 değerini oradan silip aydan hemen sonra -1 yazacaksın aynı işlem yıl içinde geçerli örneğin
15 gün geri :
$baslangic_gunu = date("Y-m-d", mktime (0,0,0,date("m"),date("d")-15,date("Y")));
3 ay geri :
$baslangic_gunu = date("Y-m-d", mktime (0,0,0,date("m")-3,date("d"),date("Y")));
2 yıl geri :
$baslangic_gunu = date("Y-m-d", mktime (0,0,0,date("m"),date("d"),date("Y")-2));11 yıl önce yazılmış -
sharq
yardımların için teşekkr ederim şimdilik bi sorun gözükmüyor :)11 yıl önce yazılmış -
Kesali
Açıklamış arkadaş. date yada UNIX_TIMESTAMP kullan en performanslı olanı. Benim verdiğim örnek senin database ine göre yapılmıştı performansı daha kötü olacaktır ayrıca mysqle fazladan yük getirecekti.
Bir hatam olmuş WHERE yerine HAVING olması lazım sorgumda. Birkaç yerde daha düzeltme yaptım. Eğer böyle birşeye ihtiyacı olan varsa örnek sql kodu.SELECT haberler.*, UNIX_TIMESTAMP(CONCAT(CONCAT_WS('-',haberler.yil,haberler.ay,haberler.gun),' 00:00:00')) AS time_stamp FROM haberler HAVING time_stamp > UNIX_TIMESTAMP()-(60*60*24*7)
11 yıl önce yazılmış
-