рдПрдХ рд╕рд╛рдзрд╛рд░рдг MySQL рдХреНрд╡реЗрд░реА рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо


рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдЯрди рдХрд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдРрд╕рд╛ рдЕрдЬреАрдм рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред MariaDB рдкрд░, рдЗрд╕рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ MySQL рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╛рдиреА рдЕрдиреБрд░реЛрдз рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рдерд╛, рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╢реЛрдз рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред


рдЕрдВрддрд┐рдо рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рди рдХреЗ рджреМрд░рд╛рди рдордВрдЪ рдкрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдлрд╝реЛрд░рдо рдкреЛрд╕реНрдЯ рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реИрдВ:
CREATE TABLE `forum_posts` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(10) unsigned NOT NULL, `created` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
 INSERT INTO `forum_posts` (`user_id`, `created`) VALUES (1, '2013-01-01'), (1, '2013-01-01'), (2, '2013-01-01'), (2, '2013-01-01'), (2, '2013-01-01'), (3, '2013-01-01'), (3, '2013-01-01'), (4, '2013-01-01'), (5, '2013-01-01'), (5, '2013-01-01'), (1, '2013-01-02'), (1, '2013-01-02'), (2, '2013-01-02'), (2, '2013-01-02'), (3, '2013-01-02'), (3, '2013-01-02'), (4, '2013-01-02'), (4, '2013-01-02'), (1, '2013-02-02'), (1, '2013-02-02'), (2, '2013-02-02'), (2, '2013-02-02'), (3, '2013-02-02'), (3, '2013-02-02'), (4, '2013-02-02'), (4, '2013-02-02'), (5, '2013-02-02'), (5, '2013-02-02'); 


рдПрдХ рдХреНрд╡реЗрд░реА рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддреА рд╣реИ:
 SELECT DATE(fp.created) dt, count(*) qnt FROM forum_posts fp WHERE fp.id IN ( SELECT fp2.id FROM forum_posts fp2 WHERE fp2.created >= '2013-01-01' AND fp2.created < '2013-02-01' GROUP BY DATE(fp2.created), fp2.user_id ) GROUP BY dt; 

рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛, рдпрд╣ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛:
 2013-01-01 10 2013-01-02 8 

рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЕрд▓рдЧ рд╕реЗ рд╕рдмрдХреНрд╡реЗрд░реА рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝ рдкрдбрд╝рд╛ - рдЙрд╕рдиреЗ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо (9 рд▓рд╛рдЗрди) рд▓реМрдЯрд╛рдпрд╛ред рдЕрд░реНрдерд╛рдд, WHERE id IN (...) рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ IN (...) рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд▓реМрдЯрд╛рдП рдЧрдПред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╢рд╛рдо рд▓рдВрдмреА рдереАред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ?


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

рдЪреВрдВрдХрд┐ рдореИрдВ рд░рд╣рд╕реНрдпрд╡рд╛рдж рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╢рд╛рдо рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрдж рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдорд░реЗрдб xzander рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореЗрд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдбрдВрдк рдкрд░ рдПрдХ рдХреНрд╡реЗрд░реА рд▓реЙрдиреНрдЪ рдХреА (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рдЧрднрдЧ 4 рдорд┐рд▓рд┐рдпрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдереАрдВ)ред рдкрд░рд┐рдгрд╛рдо рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛ - 10 рдорд┐рдирдЯ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖред рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ MariaDB (5.5.30) рдкрд░ рдПрдХ рдХреНрд╡реЗрд░реА рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ MySQL (5.58) рдкрд░ рд╣реИ

рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ MySQL рдФрд░ MariaDB рдореЗрдВ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред "рд╕реНрдорд╛рд░реНрдЯ" MySQL рдЕрдиреБрдХреВрд▓рдХ рдХрд╛ рдлреИрд╕рд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдПрдХ рдЙрдк-рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк N рдмрд╛рд░ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдХ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

MariaDB рдкреЗрдЪреАрджрд╛ рд╣реИ - рдпрд╣ рдХреНрд╡реЗрд░реА рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдирдЧрд░ рдореЗрдВ GROUP BY рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рдПрдХ рдмрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ ред рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрдХреНрд░рдордг рдХреА рдкреВрд░реНрдг рд╕рдВрдЧрддрддрд╛ рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдХреИрд╕реЗ рдкрд╛рдпрд╛? рдпрджрд┐ рдЖрдк рдЬреЙрдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рдмрдХреНрд╡реЗрд░реА рдХреНрдпреЛрдВ? рдпрд╣ рд╕рд░рд▓ рд╣реИ: рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдФрд░ рдЗрд╕рдореЗрдВ, рдХрд┐рд╕реА рднреА рд╕рднреНрдп рдУрдЖрд░рдПрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред

рдХреНрдпрд╛ рдХрд░реЗрдВ?


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдзреЛрдЦрд╛ рджреЗрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛: рдпрд╣ рдЙрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдХрд┐ рдЙрдкрдирдЧрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛, HAVING 1 рдЬреЛрдбрд╝рдирд╛

рддреЛ рдпрд╣рд╛рдБ рдХреНрд╡реЗрд░реА рд╣реИ рдЬреЛ рдорд╛рд░рд┐рдпрд╛рдбреАрдмреА рдкрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ:
 SELECT DATE(fp.created) dt, count(*) qnt FROM forum_posts fp WHERE fp.id IN ( SELECT fp2.id FROM forum_posts fp2 WHERE fp2.created >= '2013-01-01' AND fp2.created < '2013-02-01' GROUP BY DATE(fp2.created), fp2.user_id HAVING 1 ) GROUP BY dt; 

MySQL рдкрд░, рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдлрд┐рд░ рднреА рдХреНрд╡реЗрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рд╕рдмрдХреНрд╡реЗрд░реА рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рджрд┐рд▓рд╛рдПрдЧрд╛ред

рд╣рдо рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ?


  1. рдЖрдкрдХреЛ рд╕рд░рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рднреА рдЬрд╛рдВрдЪрдиреЗ рд╣реЛрдВрдЧреЗред рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдРрд╕рд╛ рдЕрдиреБрд░реЛрдз рдЧрд▓рдд рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  2. MySQL рд╕реЗ MariaDB рддрдХ рд╕рдВрдХреНрд░рдордг рдЙрддрдирд╛ рдкрд╛рд░рджрд░реНрд╢реА рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВред
  3. рдЬрдм рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ ORM рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдпреБрдкреАрдбреАред
рдЕрд▓рдиреЛ рджрд╛рдЦрд┐рд▓ рдХрд░рдиреЗ рд╕реЗ , рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ fp2.id HAVING 1 рд╕рд╛рде рдПрдХ рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ fp2.id рдореЗрдВ MIN(fp2.id) рд╕рд╛рде fp2.id рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд▓реЗрдХрд┐рди рдкреЗрдЯреНрд░реЛрдкрд╛рд╡реЗрд▓ рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдЧ рдерд╛, рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рдереА, рдФрд░ рдорд╛рд░рд┐рдпрд╛рдмреЗрдб рдмрдЧ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рдЯрд┐рдХрдЯ рдмрдирд╛рдпрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In181195/


All Articles