2013-01-22 14 views
5

के बीच सप्ताहों में अंतर मेरे पास निम्न प्रश्न है।PHP और MySQL

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

यह निम्न परिणाम

32 33 2012 
43 34 2012 
39 35 2012 
17 36 2012 

मैं अब सप्ताह में सभी 39 रिकॉर्ड 2012 के 35 मैं नहीं चाहता कि, तथापि, यह के रूप में मेरे कहां खंड में WEEK(date)=35 AND YEAR(date)=2012 उपयोग करना चाहते हैं प्राप्त करना चाहते हैं पैदा करता है कहो इंडेक्स का उपयोग नहीं करता है। इसके बजाय, मैं सीमाएं ढूंढना चाहता हूं और सशर्त उपयोग करना चाहता हूं। मैं भी गोलियों का उपयोग नहीं करना चाहता क्योंकि राउंडिंग त्रुटियां हो सकती हैं।

इसलिए मैं निम्नलिखित सोचने की कोशिश करता हूं कि सभी अच्छे हैं, लेकिन 39 रिकॉर्ड प्राप्त नहीं करते हैं। स्पष्ट रूप से MySQL और PHP सप्ताहों के साथ अलग-अलग सौदे करते हैं। मैं देखता हूं कि MySQL WEEK() मोड 0, 2, 4, और 6 का उपयोग करता है जो सभी सप्ताह के साथ शुरू होने वाले सप्ताह में लौटते हैं। आदर्श रूप से, मेरे पास सबसे अधिक लोगों द्वारा उपयोग किया जाने वाला एक व्यक्ति होगा, सबसे महत्वपूर्ण बात यह है कि यह डेटटाइम द्वारा प्रदान की गई है। मैं ऐसा कैसे करूं? धन्यवाद

$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 आप इसे पारित मोड के आधार पर सप्ताह गिनती संभालती है, (http://dev.mysql.com/doc/ [वीक (तिथि, मोड) देखें] refman/5.5/en/date-and-time-functions.html # function_week), आप सिस्टम चर में इस सर्वर-व्यापी को भी सेट कर सकते हैं। – fiz

+0

क्या आपको 39 से कम रिकॉर्ड मिल रहे हैं? शायद आपकी कहां स्थिति 'तारीख <=?' होनी चाहिए। – BellevueBob

+0

@fiz मैंने देखा कि कैसे WEEK() के अलग-अलग तरीके थे, लेकिन यह सुनिश्चित नहीं था कि यह कैसे मदद करेगा। – user1032531

उत्तर

11

MySQL कैसे काम करता है, इस संबंध में आप सही रास्ते पर हैं, जिसमें सप्ताह के संबंधित कार्यों के लिए विभिन्न तरीके हैं जो विभिन्न परिणामों का उत्पादन कर सकते हैं। http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

यह मेरी समझ MySQL मोड जो पीएचपी की तारीख तर्क के बराबर है मोड 3 है, जो ISO सप्ताह तारीख मानक http://en.wikipedia.org/wiki/ISO_week_date

इस सप्ताह सोमवार को शुरू करने और सप्ताह के गिने 1-53 है है।

तो आपको PHP संगत मान प्राप्त करने के लिए WEEK(date_field, 3) का उपयोग करने की आवश्यकता होगी।

वैकल्पिक दृष्टिकोण के रूप में, मुझे एक ऐसी चीज मिली है जहां आपको अलग-अलग दिनांक सीमाओं या समेकन (क्यू 1-क्यू 4, एच 1 - एच 2, आदि) पर लचीला रूप से पूछताछ करने की क्षमता की आवश्यकता है, या जहां आपको आवश्यकता हो सकती है PHP समर्थन से अलग सप्ताहों का उपयोग करना MySQL में दिनांक सहायक तालिका का उपयोग करना है (यदि आप उससे परिचित हैं, तो डेटा वेयरहाउस में दिनांक आयाम तालिका के रूप में उपयोग करने वाले किसी भी व्यक्ति के समान)। यह तिथि सीमाओं को देखने के लिए आपसे जुड़ने के लिए एक सुविधाजनक तालिका दे सकता है। कुछ इस तरह काम करना चाहिए:

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

+0

आह हे, मैं करीब आ रहा था। मैं मोड 3 की जांच करूंगा! – user1032531

+0

आप आदमी माइक हैं! सही काम करता है। – user1032531