Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL दिनांक/लेखक तुलना

मुझे लगता है कि आपको दिनांक संदर्भ तालिका बनानी चाहिए, उस तालिका को पॉप्युलेट करना चाहिए और फिर LEFT OUTER JOIN आपकी क्वेरी में उस तालिका से। 'मैं गुम तिथियां कैसे प्रदर्शित करूं?' की समस्या काफी सामान्य SO प्रश्न लेकिन मैं इसके लिए वैसे भी जाऊंगा।

प्रारंभिक चरण

mysql प्रांप्ट रन पर:

use WordPress;

चरण 1 - दिनांक संदर्भ तालिका बनाएं

create table all_date 
(id int unsigned not null primary key auto_increment, 
a_date date not null,
last_modified timestamp not null default current_timestamp on update current_timestamp,
unique key `all_date_uidx1` (a_date));

चरण 2 - दिनांक संदर्भ तालिका तैयार करें

इस तालिका का विचार प्रत्येक तिथि के लिए एक पंक्ति रखना है। अब आप इन्सर्ट स्टेटमेंट्स एड नॉज़ियम चलाकर इसे हासिल कर सकते हैं, लेकिन इसे अपने लिए पॉप्युलेट करने के लिए एक रूटीन क्यों न लिखें (आप इवेंट बना सकते हैं MySQL शेड्यूल्ड इवेंट यह सुनिश्चित करने के लिए कि आपके पास तालिका में हमेशा तिथियों का एक पूरा सेट है। यहाँ उस दिनचर्या के लिए एक सुझाव दिया गया है:

DELIMITER //


CREATE PROCEDURE populate_all_dates(IN from_date DATE, IN days_into_future INT)

BEGIN

 DECLARE v_date DATE;
 DECLARE ix int;


 SET ix := 0;
 SET v_date := from_date;


 WHILE v_date <= (from_date + interval days_into_future day) DO

  insert into all_date (a_date) values (v_date) 
  on duplicate key update last_modified = now();

  set ix := ix +1;

  set v_date := from_date + interval ix day;

 END WHILE;

END//

DELIMITER ;

अब आप दौड़ सकते हैं:

call populate_all_dates('2011-10-01',30);

अक्टूबर के लिए सभी तिथियों को भरने के लिए (या बस days_into_the_future को क्रैंक करें जो भी आप चाहते हैं उसके लिए पैरामीटर)।

अब जब आपके पास एक दिनांक संदर्भ तालिका है जिसमें सभी तिथियां शामिल हैं जिन्हें आप पॉप्युलेट करना चाहते हैं तो आप आगे बढ़ सकते हैं और अक्टूबर के लिए अपनी क्वेरी चला सकते हैं:

select day(a.a_date) as 'October',
IFNULL(t.a1,0) as 'Auth1',
IFNULL(t.a2,0) as 'Auth2',
IFNULL(t.a50,0) as 'Auth50'
from all_date a
LEFT OUTER JOIN
(
SELECT date(wp.post_date) as post_date,
sum(case when wp.post_author = '1' then 1 else 0 end) as a1,
sum(case when wp.post_author = '2' then 1 else 0 end) as a2,
sum(case when wp.post_author = '50' then 1 else 0 end) as a50,
count(*) as 'All Auths'
FROM wp_posts wp
WHERE  wp.post_type = 'post'
AND wp.post_date  between '2011-10-01' and '2011-10-31 23:59:59'
GROUP BY date(wp.post_date)
) t
ON a.a_date = t.post_date
where a.a_date between '2011-10-01' and '2011-10-31'
group by day(a.a_date);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. नोड.जेएस में प्रमाणीकरण कैसे करें जिसे मैं अपनी वेबसाइट से उपयोग कर सकता हूं?

  2. बैक बटन के कारनामों को रोकें? पीएचपी

  3. MySQL सुनो समकक्ष को सूचित करें

  4. केकफ़्पी:अब कैसे () खोज स्थिति में काम करें?

  5. जावा के माध्यम से MySQL में स्ट्रिंग ऐरे स्टोर करें?