Last active
December 15, 2015 18:09
-
-
Save zolzaya/5301393 to your computer and use it in GitHub Desktop.
Nested category
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
За тэгвэл чадлынхаа хэрээр тайлбарлах гээд үзье: Ангилалуудаа categories гэсэн хүснэгтэнд хадгальяа, | |
тэр хүснэгт нь id, name, ancestry гэсэн талбаруудтай. | |
Хамгийн эхний өгөгдөл буюу A-г хийхэд дараах байдалтай болно. | |
id|name|ancestry | |
1|A|null | |
Өөрөөр хэлбэл A нь root болно. Одоо B-г нэмвэл: | |
id|name|ancestry | |
1|A|null | |
2|B|null | |
Харин одоо A-н доор C-г нэмвэл: | |
id|name|ancestry | |
1|A|null | |
2|B|null | |
3|C|1 | |
C-н ancestry дахь 1 гэдэг утга нь өөрийн эцэг ангилалыг зааж байна. Одоо C ангилалд D-г нэмвэл дараах бүтэцтэй болно. | |
id|name|ancestry | |
1|A|null | |
2|B|null | |
3|C|1 | |
4|D|1/3 | |
Одоогийн байдлаар D-н эцэг ангилал нь C, A болж байна иймэрхүү байдлаар хэд хэдэн өгөгдөл нэмвэл: | |
id|name|ancestry | |
1|A|null | |
2|B|null | |
3|C|1 | |
4|D|1/3 | |
5|E|1 | |
6|F|1/3/4 | |
7|G|1/3/6 | |
8|H|2 | |
9|I|1/3 | |
Одоо ангилалууд дундаасаа бүх root ангилалыг сонгох query нь: | |
SELECT * FROM categories WHERE ancestry = NULL; | |
А ангилал дах бүх хүүхэд ангилалуудыг сонгох query нь: | |
SELECT * FROM categories WHERE ancestry LIKE '1%'; | |
C ангилал дах бүх хүүхэд ангилалуудыг сонгох query нь: | |
SELECT * FROM categories WHERE ancestry LIKE '1/3%'; | |
G анилал дах бүх эцэг ангилалуудыг сонгох query нь: | |
SELECT * FROM categories WHERE id IN (1,3,6) # G ангилал дах ancestry-н утгыг / тэмдэгтээр нь split хийнэ | |
гэх мэт query бичигдэнэ. | |
Дээрх байдлаар үргэлжлүүлээд байх юм бол бидний ангилал буюу модны гүн хэд ч болсол бай, хичнээн | |
хэмжээний өгөгдөлтэй байсан ч хамаагүй ямар ч РЕКУРСИВ функц/query ашиглахгүйгээр, зөвхөн | |
ганцхан ширхэг query-р өгөгдөлийг шүүж гаргаж авах боломжтой болно. | |
Мөн дээрх ангилалд хамаарагдаж байгаа өгөгдлийн тоо /жишээ нь бүтээгдэхүүний тоо/, | |
өөрийн гүн буюу дээрээ хэдийн гүнд байгаа зэрэг мэдээллийг тусад нь талбаруудад хадгалаад, | |
эдгээр талбаруудаа insert, update, delete хийж байхад зөв удирдаад явчихад л болно. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Сайхан арга байна.