рд╡рд░реНрд╖ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╣реАрдиреЗ рдореЗрдВ рдХреИрд▓реЗрдВрдбрд░ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛

рд╕рдорд╕реНрдпрд╛ рдХрдерди:

рд╡рд░реНрд╖ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╣реАрдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред



рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЗ рджреЛ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ

- start_date - рдШрдЯрдирд╛ рдХреА рддрд╛рд░реАрдЦ рд╢реБрд░реВ рдХрд░реЗрдВ

- end_date - рдЗрд╡реЗрдВрдЯ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рддрд╛рд░реАрдЦ



рдХреИрд▓реЗрдВрдбрд░ рдИрд╡реЗрдВрдЯ рд▓реЗрдмрд▓ рд╕рдВрд░рдЪрдирд╛:

CREATE TABLE `events` (

`id` int (11) unsigned NOT NULL auto_increment,

`start_date` date default NULL ,

`end_date` date default NULL ,

`created` datetime default NULL ,

`modified` datetime default NULL ,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8




* This source code was highlighted with Source Code Highlighter .








рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:

рдЬрдирд╡рд░реА 21 рдлрд░рд╡рд░реА 34 рдорд╛рд░реНрдЪ 47
рдордИ 8 рдЬреВрди 12 рдЬреБрд▓рд╛рдИ 23
рдЕрдЧрд╕реНрдд 56 рд╕рд┐рддрдВрдмрд░ 11 рдЕрдХреНрдЯреВрдмрд░ 35
рдирд╡рдВрдмрд░ 34 рджрд┐рд╕рдВрдмрд░ 24




рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк:



- MONTH (start_date) = MONTH (end_date), YEAR (start_date) = YEAR (end_date);

рдПрдХ рдШрдЯрдирд╛ рдПрдХ рд╡рд░реНрд╖ рдХреЗ рдПрдХ рд╣реА рдорд╣реАрдиреЗ рдореЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред



- MONTH (start_date) <MONTH (end_date), YEAR (start_date) = YEAR (end_date);

рдПрдХ рдШрдЯрдирд╛ рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рд▓ рдХреЗ рджреВрд╕рд░реЗ рдорд╣реАрдиреЗ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред



- MONTH (start_date) = MONTH (end_date), YEAR (start_date) <YEAR (end_date);

рдШрдЯрдирд╛ рдЙрд╕реА рдорд╣реАрдиреЗ рдореЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП (рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд░реНрд╖ рддрдХ рд░рд╣рддрд╛ рд╣реИ)ред



- MONTH (start_date) <MONTH (end_date), YEAR (start_date) <YEAR (end_date);

рдШрдЯрдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ (рджрд┐рд╕рдВрдмрд░ рдореЗрдВ рд╢реБрд░реВ рд╣реБрдИ, рдЬрдирд╡рд░реА рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдИ)ред



рд╕рдорд╛рдзрд╛рди:

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ (рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдПрдХ рдорд╣реАрдирд╛ рд╣реИ), рдпрд╛ рдПрдХ рдХреЙрд▓рдо рдореЗрдВ (рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╣реАрдирд╛ рд╣реИ)ред

JOINs рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ (рдШрдЯрдирд╛ рдХреА рдЕрд╕реАрдорд┐рдд рдЕрд╡рдзрд┐ JOINs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдмрди рдЧрдИ)ред рдпрд╣реА рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдорд╛рдереЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ, рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рд╛рд▓ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдШрдЯрдирд╛ рдХрд┐рди рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╣реЛрддреА рд╣реИред рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MYSQL рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред



рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

DELIMITER $$



DROP FUNCTION IF EXISTS `isEventInMonth`$$



CREATE FUNCTION `isEventInMonth`(

startdate DATE ,

enddate DATE ,

_month INT (1),

_year INT (1)

) RETURNS INT (1)

BEGIN

DECLARE results INT (1);



IF YEAR (startdate) = YEAR (enddate) THEN

SET results = IF ( MONTH (startdate) = _month

AND MONTH (enddate) = _month

OR

( MONTH (startdate) <> MONTH (enddate)

AND ( MONTH (startdate) <= _month

AND MONTH (enddate) >= _month)

)

,1,0);

ELSEIF YEAR (startdate) = _year THEN

SET results = IF ( MONTH (startdate) <= _month ,1,0);

ELSE

SET results = IF ( MONTH (enddate) >= _month ,1,0);

END IF ;



RETURN results;

END $$



DELIMITER ;




* This source code was highlighted with Source Code Highlighter .








рдпрд╣ рдЗрдирдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдИрд╡реЗрдВрдЯ рдХреА рдкреНрд░рд╛рд░рдВрдн рддрд┐рдерд┐, рдИрд╡реЗрдВрдЯ рдХреА рдЕрдВрддрд┐рдо рддрд┐рдерд┐, рдорд╛рд╣ рдФрд░ рд╡рд░реНрд╖ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ 0 рдпрд╛ 1 рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдорд╣реАрдирд╛ рдИрд╡реЗрдВрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╣реИред



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:



SELECT

SUM (isEventInMonth(start_date,end_date,1,2011)) AS jan,

SUM (isEventInMonth(start_date,end_date,2,2011)) AS feb,

SUM (isEventInMonth(start_date,end_date,3,2011)) AS mar,

SUM (isEventInMonth(start_date,end_date,4,2011)) AS apr,

SUM (isEventInMonth(start_date,end_date,5,2011)) AS may,

SUM (isEventInMonth(start_date,end_date,6,2011)) AS jun,

SUM (isEventInMonth(start_date,end_date,7,2011)) AS jul,

SUM (isEventInMonth(start_date,end_date,8,2011)) AS aug,

SUM (isEventInMonth(start_date,end_date,9,2011)) AS sep,

SUM (isEventInMonth(start_date,end_date,10,2011)) AS 'oct' ,

SUM (isEventInMonth(start_date,end_date,11,2011)) AS nov,

SUM (isEventInMonth(start_date,end_date,12,2011)) AS 'dec'

FROM EVENTS WHERE YEAR (start_date) = 2011 OR YEAR (end_date) = 2011




* This source code was highlighted with Source Code Highlighter .








рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реЛрдЧреА, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдорд╛рд╣ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╡реЗрдВрдЯ рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдорд╛рдирдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдЧрд╛ред

рдкреНрд░рд╢реНрди рдФрд░ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдкреБрдирд╢реНрдЪред рд▓реЗрдмрд▓ рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдФрд░ рд╡рд┐рд╡рд░рдг рдлрд╝реАрд▓реНрдб рдХреА рддрд▓рд╛рд╢ рди рдХрд░реЗрдВ - рдпреЗ рдЕрдиреБрд╡рд╛рдж рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдФрд░ рд╡реЗ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред



рдпреБрдкреАрдбреА:



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ xtender рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдзрд┐рдХ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред



SELECT <br>

sum ( CASE when t.`start_date`< '2010-02-01' and t.end_date>= '2010-01-01' then 1 else 0 end ) AS jan,<br>

sum ( CASE when t.`start_date`< '2010-03-01' and t.end_date>= '2010-02-01' then 1 else 0 end ) AS feb,<br>

sum ( CASE when t.`start_date`< '2010-04-01' and t.end_date>= '2010-03-01' then 1 else 0 end ) AS mar,<br>

sum ( CASE when t.`start_date`< '2010-05-01' and t.end_date>= '2010-04-01' then 1 else 0 end ) AS apr,<br>

sum ( CASE when t.`start_date`< '2010-06-01' and t.end_date>= '2010-05-01' then 1 else 0 end ) AS may,<br>

sum ( CASE when t.`start_date`< '2010-07-01' and t.end_date>= '2010-06-01' then 1 else 0 end ) AS jun,<br>

sum ( CASE when t.`start_date`< '2010-08-01' and t.end_date>= '2010-07-01' then 1 else 0 end ) AS jul,<br>

sum ( CASE when t.`start_date`< '2010-09-01' and t.end_date>= '2010-08-01' then 1 else 0 end ) AS aug,<br>

sum ( CASE when t.`start_date`< '2010-10-01' and t.end_date>= '2010-09-01' then 1 else 0 end ) AS sep,<br>

sum ( CASE when t.`start_date`< '2010-11-01' and t.end_date>= '2010-10-01' then 1 else 0 end ) AS oct,<br>

sum ( CASE when t.`start_date`< '2010-12-01' and t.end_date>= '2010-11-01' then 1 else 0 end ) AS nov,<br>

sum ( CASE when t.`start_date`< '2011-01-01' and t.end_date>= '2010-12-01' then 1 else 0 end ) AS dec <br>

FROM events t
<br>

<br>

* This source code was highlighted with Source Code Highlighter .







All Articles