2012-12-06 20 views
13
SELECT User_JoinDate, 
COUNT(User_ID) 
FROM Users WHERE `User_JoinDate` 
BETWEEN '2012-11-22' AND '2012-12-06' 
GROUP BY User_JoinDate 
ORDER BY User_JoinDate ASC" 

मैं डेटा ग्राफ़ में प्रदर्शित होने के लिए डेटा उत्पन्न कर रहा हूं। दुर्भाग्य से मैं यह नहीं समझ सकता कि उपर्युक्त क्वेरी को उस दिनांक के लिए 0 प्रदर्शित करने के लिए कैसे प्राप्त किया जाए, जिस पर कोई उपयोगकर्ता पंजीकृत नहीं हो सकता है। तो वर्तमान में मेरे उत्पादन कुछ इस तरह हो सकता है:कोई परिणाम नहीं है, भले ही कोई परिणाम

 
2012-11-22 - 2 
2012-11-25 - 4 

लेकिन क्या मैं चाहता हूँ

 
2012-11-22 - 2 
2012-11-23 - 0 
2012-11-24 - 0 
2012-11-25 - 4 

मैं वर्तमान में काम कर रहे संस्करण है जो MySQL एक सरणी में परिणाम संग्रहीत करता है और उसके बाद की क्या ज़रूरत है पीएचपी के माध्यम से लूप और रिक्त स्थान भरता है। यह बहुत गन्दा लगता है और मैं उम्मीद कर रहा था कि MySQL के माध्यम से एक समाधान होगा। मुझे साइट की अच्छी खोज मिली है लेकिन कुछ कार्यान्वयन को समझने के लिए संघर्ष कर रहा है। कोई सुझाव?

+0

काम कर रहे एक जगह के रूप में कोई त्रुटि है, मुझे यकीन नहीं है कि कैसे, लेकिन मुझे यकीन है कि यह वहां है), फिर उस तालिका में शामिल हों। – ajon

उत्तर

11

आप अपनी इच्छित तिथियों के लिए MySQL चर का उपयोग कर एक स्वचालित परिणाम सेट बना सकते हैं।

select 
     AllDaysYouWant.MyJoinDate, 
     count(U.User_ID) as NumberJoined 
    from 
     (select 
       @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate 
      from 
       (select @curDate := '2012-11-21') sqlvars, 
       Users 
      limit 18) AllDaysYouWant 
     LEFT JOIN Users U 
     on AllDaysYouWant.MyJoinDate = U.User_JoinDate 
    group by 
     AllDaysYouWant.MyJoinDate 

भीतरी क्वेरी, मैं सिर्फ उन तालिका करने के लिए कोई कुंजी के साथ, में शामिल होने के कर रहा हूँ ताकि इसकी सिर्फ दिवस अवधि आप चाहते हैं का प्रतिनिधित्व करने के रिकॉर्ड की एक्स संख्या के माध्यम से चक्र के लिए इस्तेमाल किया ... यह हो सकता है 30, 100 , जो भी हो .... बस जब तक एक टेबल (इस मामले में उपयोगकर्ताओं) में, उतने रिकॉर्ड हैं जितना आप उम्मीद कर रहे हैं।

फिर, कुछ भी नहीं, लेकिन कुछ दिनों के परिणामस्वरूप उपयोगकर्ता तालिका में शामिल हो गया है, लेकिन इस बार, उपयोगकर्ता के JOIN_DATE के आधार पर। सरल COUNT() आपको वह प्राप्त करना चाहिए जो आप चाहते हैं।

"AllDaysYouWant"

(select 
      @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate 
     from 
      (select @curDate := '2012-11-21') sqlvars, 
      Users 
     limit 18) AllDaysYouWant 

के आंतरिक पहले भाग क्वेरी करने के लिए सौंपा अन्य नाम है यह मूल रूप से कहा गया है ... उन तालिका से (लेकिन किसी भी हो सकता है), मुझे डेटा के 18 पंक्तियों देना (सीमा के माध्यम से, लेकिन लगभग किसी भी रिकॉर्ड के लिए हो सकता है, लेकिन आपको केवल 22 नवंबर से 6 दिसंबर तक की आवश्यकता है, जो केवल 14 दिन है, लेकिन मैंने केवल सिद्धांत के लिए 18 किया है, यह लगभग कुछ भी हो सकता है। उपयोगकर्ता तालिका के ऊपर (चुनें @ curDate: = '2012-11-21') sqlvars। तालिका स्रोत के रूप में कोष्ठक में लिपटे एक क्वेरी के भीतर कोई भी चयन कथन एक उपनाम दिया जाना चाहिए और चूंकि यह केवल एक चर है जिसका उपयोग मैं करूँगा, परवाह नहीं है इसका नाम क्या है। इसलिए, यह क्वेरी 21 नवंबर को वैरिएबल शुरू करती है और @curDate का चयन करें: = Date_Add ... blah blah @curDate का वर्तमान मान लेने के लिए कहता है, इसमें 1 दिन जोड़ें (अब 22 नवंबर हो जाता है) और इसे वापस लौटाई पंक्ति "MyJoinDate" में संग्रहीत करें। तो अब, यह आंतरिक क्वेरी 22 नवंबर से 18 दिनों के डेटा के डेटा की तारीखों की आपकी तालिका बनाता है और संदर्भ के बाकी प्रश्नों के लिए उपनाम "AllDaysYouWant" है।

मैं क्वेरी जो आप शायद क्या का सामना करना पड़ा था, स्पष्टीकरण के लिए सब कुछ करने के लिए समायोजित alias.field है ...

+0

प्रतिक्रिया के लिए धन्यवाद।दुर्भाग्य से मुझे '1, @curDate) के पास MyJQL सिंटैक्स त्रुटि मिल रही है (MyLECTDate: =' 2 '। – user1883978

+0

@ user1883978, निश्चित ... SQL-Server बनाम MySQL दिनांक कैल्क पर ... संशोधित देखें date_add() सामग्री – DRapp

+0

यह ज्ञान की पूरी कमी हो सकती है जब इस तरह के अधिक जटिल प्रश्नों की बात आती है लेकिन मुझे यह काम नहीं मिल रहा है। मुझे यकीन है कि 'ऑलडेज यूवंट' क्या है और यह 'अज्ञात' कॉलम 'अगर मैं क्वेरी का उपयोग करने की कोशिश करता हूं। मदद के लिए धन्यवाद! – user1883978

1

आपको बस इतना करना
1. तिथि सीमा उत्पन्न की जरूरत है।
2. फिर उन तारीखों का चयन करें जो आपके परिणाम में मौजूद नहीं हैं जिसके परिणामस्वरूप
3 से ऊपर क्वेरी है और ऊपर अपनी क्वेरी के साथ एक संघ करें।

1

यह 66 रिकॉर्ड केवल मैं सीमा में 120 बीत चुके हैं दिखा रहा है

SELECT AllDaysYouWant.MyJoinDate, count(U.id) AS NumberJoined FROM (SELECT @curDate := Date_Add(@curDate , INTERVAL 1 DAY) AS MyJoinDate FROM (SELECT @curDate := '2013-08-03')sqlvars, ipro_user LIMIT 150)AllDaysYouWant LEFT JOIN ipro_user U ON AllDaysYouWant.MyJoinDate = date_format(`date` , '%Y-%m-%d') AND U.active=1 GROUP BY AllDaysYouWant.MyJoinDate 

क्वेरी शुरू करने के लिए मैं एक प्रश्न है कि आप सभी तिथियों (मैं देता बनाना होगा ठीक

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