ئىمپىلنىڭ بىلوگ ئەپنى يېزىۋاتقان چاغدا خەتكۈچكە ئاساسەن يازمىغا ئېرىشىدىغان ئىھتىياج چىقىپ قالدى .
مەسلەن بىر يازمىغا «ھەقسىز » ، « ھالەت » دەپ خەتكۈچ قېتىلدى . مەن بۇ ئىككى خەتكەچنىڭ ID سىنى سۇنۇش ئارقىلىق بۇ يازمىغا ئېرىشمەكچى .
جەدىۋەلنىڭ تۈزىلىشى مۇنداق :
表: blog__post
列 类型 注释
id int(10) unsigned 自动增量
title varchar(200) NULL
content text NULL
user_id int(11) NULL
state tinyint(4) NULL 0待发布1已发布2下线处理
is_sticky tinyint(4) NULL 是否被置顶
view_count int(11) NULL
created_at timestamp NULL
updated_at timestamp NULL
表: blog__post_relations
列 类型 注释
id int(10) unsigned 自动增量
model_id int(10) unsigned
relation_name enum('tags','liked_users','category','custom1','custom2','custom3','custom4')
relation_id int(11)
options json NULL
created_at timestamp NULL
updated_at timestamp NULL
表: category__category
id int(10) unsigned 自动增量
name varchar(190) NULL
description text NULL
order int(11) NULL [0]
remark text NULL
parent_id int(11) NULL [0]
model varchar(32) NULL
model_id int(11) NULL [0]
created_at timestamp NULL
updated_at timestamp NULL
يازما مۇناسىۋەت جەدىۋېلىگە يازمىنىڭ نۇمۇرى ، مۇناسىۋەتنىڭ ئىسمى شۇنداقلا مۇناسىۋەت قىلغۇچىنىڭ نۇمۇرى ساقلىندۇ . بۇ يازمىدا دېيىلىۋاتقان مۇناسىۋەت خەتكۈچ .
مەن مۇنداق ھەل قىلدىم :
بىر خەتكۈچ ئارقىلىق ئىرىشمەكچى بولغاندا
SELECT `blog__post`.`id`,
`blog__post`.`title`,
`blog__post`.`content`,
`blog__post`.`user_id`,
`blog__post`.`state`,
`blog__post`.`is_sticky`,
`blog__post`.`view_count`,
`blog__post`.`updated_at`,
`blog__post`.`created_at`
FROM `blog__post`
INNER JOIN `blog__post_relations`
ON `blog__post`.`id` = `model_id`
WHERE `blog__post_relations`.`relation_id` = 3
AND `blog__post_relations`.`relation_name` = tags
GROUP BY `model_id`
ORDER BY `blog__post`.`id` DESC
LIMIT 15 offset 0
كۆپ خەتكۈچ ئاقىلىق ئىرىشمەكچى بولغاندا
SELECT `blog__post`.`id`,
`blog__post`.`title`,
`blog__post`.`content`,
`blog__post`.`user_id`,
`blog__post`.`state`,
`blog__post`.`is_sticky`,
`blog__post`.`view_count`,
`blog__post`.`updated_at`,
`blog__post`.`created_at`
FROM `blog__post`
INNER JOIN `blog__post_relations`
ON `blog__post`.`id` = `model_id`
WHERE `blog__post_relations`.`relation_name` = tags
GROUP BY `model_id`
HAVING Group_concat(relation_id ORDER BY blog__post_relations.relation_id SEPARATOR ',') = 3,5
ORDER BY `blog__post`.`id` DESC
LIMIT 15
offset 0
كۆپ خەتكۈچ ئارقىلىق سۈرۈشتۈرگەندە ئاساسلىق گۇرۇپلاش بىلەن having نىڭ ئىشلىتىلىش ئۇسۇلىنى بىلسەك ئاسانلا ھەل بۇلىدكەن . جەدىۋەلنى قېتىپ سۈرۈشتۈرگەندىن كىيىن ئاۋال يازما بۇيىنچە گۇرۇپلاپ ئاندىن ئۇلارنىڭ خەتكۈچ نۇمۇرىنى پەش بىلەن قېتىم بۇنى بىزدىكى خەتكۈچ نۇمۇرىغا تەڭ قىلساق بۇلىدۇ .
دېققەت قىلىشقا تىگىشلىك بىر مەسلە بىز خەتكۈچنىڭ نۇمۇرىنى پەش بىلەن قاتقان چاغدا ئاۋال بىر تەرتىپكە تىزىۋەتمىسەك سېلىشتۇرغان چاغدا ئالدى كەينى ئوخشىماس بۇلۇپ قېلىشى مۇمكىن . شۇڭا كىچىكتىن چوڭغا تىزىۋەتسەك ،سۈرۈشتۈرگەن چاغدىمۇ كىچىكتىن چوڭغا يېزىپ سۈرۈشتۈرسەك بۇلىدۇ .
Mysql نىڭ يۈرگۈزۈش تەرتىپى :
1. from
2. on
3. join
4. where
5. group by
6. having
7. select
8. distinct
9. union
10. order by
بەلكىم بۇخىل ھەل قىلىش ئۇسۇلى سۈرۈشتۈرۈش ۋاقىتىغا تەسىر يەتكۈزىشى مۇمكىن . ئەگەر دوسىتلارنىڭ تېخىمۇ قۇلايلىق ئۇسۇلى بولسا قالدۇرۇپ قويسا پىكىرلىشىپ باقساق بۇلىدۇ .