2010-03-08 9 views
5

मैं भीतर एक वर्ष पिछड़े हर दिन के डेटा प्राप्त करना चाहते, लेकिन मैं की तरह प्रत्येक दिन के लिए 365 प्रश्नों का उपयोग करने के लिए है:एक वर्ष के भीतर डेटा हर दिन प्राप्त करने के लिए केवल एक प्रश्न का उपयोग कैसे करें?

for ($i = 0; $i<365; $i++){ 
    $end_day = ...; // the end time of each day 
    $start_day = ...; // the start time of each day 
    $query = select count(*)....where created < $end_day AND created > $start_day 
} 

मुझे लगता है कि मेरे वर्तमान समाधान प्रणाली बहुत धीमी गति से बनाता है। क्या केवल एक प्रश्न का उपयोग करने का कोई तरीका है?

उत्तर

4

यह मानते हुए कि आपके बनाई स्तंभ एक DATETIME या TIMESTAMP, और डेटा संग्रहीत किया जाता है एक दिन से भी अधिक स्पष्ट है:

COUNT का चयन करें (*) ... वर्ष से ग्रुप (बनाया), महीने (बनाया), दिन (बनाया गया)

COUNT एक समग्र कार्य है और प्रत्येक समूह पर लागू होगा, यानी आपके पास प्रति समूह एक पंक्ति होगी और उस पंक्ति में उस समूह में रिकॉर्ड्स की संख्या होगी। जैसा कि हमने एक दिन एक समूह बनाया है, यह वह डेटा है जिसे आप चाहते हैं।

आप डीएई (निर्मित) द्वारा समूह नहीं कर सकते हैं क्योंकि डीएई महीने के दिन लौटाता है, इसलिए हमें यह सुनिश्चित करने के लिए महीनों और साल भी रखना होगा कि दिन अलग हैं।

शायद आप एक WHERE बनाया है> $ शुरू करना चाहते हैं और < $ को कुछ समय सीमा (या जहां वर्ष (बनाया गया) == 2010) तक सीमित करने के लिए तैयार किया है।

संदर्भ:

MySQL Query GROUP BY day/month/year

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

3

आप खंड द्वारा समूह का उपयोग कर सकते हैं। यदि यह है

SELECT COUNT(*),DATE(created) as d ..... GROUP BY d; 

: http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

अगर आप अपने तारीख में समय है आप अगर यह पहले से ही एक datetime स्तंभ है यह फ़ॉर्मेट करने के लिए केवल तारीख (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format)

select count(*), created from my_table group by created 
1

अर्जित करने होंगे यूनिक्स टाइमस्टैम्प के रूप में संग्रहीत:

SELECT COUNT(*),DATE(FROM_UNIXTIME(created)) as d ..... GROUP BY d; 

असल में, आप MySQLका उपयोग कर सकते हैं कॉलम को प्रारूपित करने के लिए, जैसे कि आप इसे केवल एक तिथि प्राप्त करते हैं, और उसके बाद उन तिथियों के समूह को प्रत्येक दिनांक के लिए गिनती प्राप्त करने के लिए।

संबंधित मुद्दे