2013-01-22 17 views
5

Aşağıdaki sorguyu kullanıyorum. PHP ile MySQL arasındaki hafta farkları

SELECT COUNT(*), WEEK(date), YEAR(date) FROM myTable GROUP ON YEAR(date), WEEK(date) 

aşağıdaki sonuçlar

Şimdi 2012'nin 35 Ben, ancak, bunun benim WHERE yan tümcesinde WEEK(date)=35 AND YEAR(date)=2012 kullanmak istemeyen haftada tüm 39 kayıtları almak istiyorum
32 33 2012 
43 34 2012 
39 35 2012 
17 36 2012 

üretir Say dizin kullanmaz. Bunun yerine, sınırları bulmak ve koşullu kullanmak istiyorum. Ayrıca, yuvarlama hataları oluşabileceğinden BETWEEN kullanmak istemiyorum.

Bu yüzden aşağıdakileri yapmayı denedim, her şey yolunda, ama 39 kayıt almayın. Açıkçası MySQL ve PHP haftalar ile farklı bir şekilde ilgileniyor. Görüyorum ki MySQL WEEK(), 0, 2, 4 ve 6 modlarını kullanır. İdeal olarak, insanlar tarafından en çok kullanılana sahip olacağım, en önemli şey ise DateTime tarafından sağlananla aynı olmasıdır. Nasıl yaparım? teşekkürler

$w=35;$y=2012; //Given 
$w=sprintf('%02d',$w); //Make sure it is two digits 
$date = new DateTime($y.'W'.$w); 
$d1=$date->format('Y-m-d'); 
$date->add(new DateInterval('P1W')); 
$d2=$date->format('Y-m-d'); 
$sql='SELECT * FROM myTable WHERE date >= ? AND date < ?'; 
+0

MySQL differntly bunu geçmesi moduna göre hafta sayısını kolları, (http://dev.mysql.com/doc/ [Hafta (tarih, mod) bakınız] refman/5.5/tr/date-and-time-functions.html # function_week), bu sunucuyu sistem değişkenlerinde de ayarlayabilirsiniz. – fiz

+0

39 kayıttan daha az mı alıyorsunuz? Belki de WHERE durumunuz 'date <=?' Olmalıdır. – BellevueBob

+0

@fiz WEEK() 'in farklı modlara sahip olduğunu gördüm, ancak bunun nasıl yardımcı olacağını bilmiyordum. – user1032531

cevap

11

Sen MySQL farklı sonuçlar üretebilir hafta ilişkili fonksiyonlar için çeşitli şekillerde sahip, nasıl çalıştığı konusunda doğru yolda bulunmaktadır. http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

Anladığım kadarıyla PHP'nin tarih mantığı eşdeğerdir mod 3, Bu hafta pazartesi günü başlayan ve hafta 1-53 sayılı sahiptir http://en.wikipedia.org/wiki/ISO_week_date

standart ISO hafta tarihtir MySQL modudur.

PHP uyumlu değerler almak için WEEK(date_field, 3)'u kullanmanız gerekir.

Alternatif bir yaklaşım olarak, farklı tarih aralıklarında veya toplamalarda (Q1-Q4, H1 - H2, vb.) Esnek bir şekilde sorgulama yapabilmeniz veya ihtiyacınız olabileceğiniz durumlarda kullanışlıdır. PHP desteklerinden farklı haftalar kullanmak, MySQL'de bir tarih yardımcı tablosu kullanmaktır (buna aşina iseniz, bir veri ambarı içinde bir tarih boyutu tablosu olarak ne kullanabileceğine benzer). Tarih aralıkları aramak için size katılmak için uygun bir tablo verebilir. Böyle bir şey çalışması gerekir:

http://databobjr.blogspot.com/2012/06/create-date-dimension-table-in-mysql.html

+0

Ah ha, yaklaşıyordum. 3 numaralı modu kontrol edeceğim! – user1032531

+0

Siz adam Mike'sın! Mükemmel çalışır. – user1032531

İlgili konular