Skip to content

Instantly share code, notes, and snippets.

@zolzaya
Last active December 15, 2015 18:09
Show Gist options
  • Save zolzaya/5301393 to your computer and use it in GitHub Desktop.
Save zolzaya/5301393 to your computer and use it in GitHub Desktop.
Nested category
За тэгвэл чадлынхаа хэрээр тайлбарлах гээд үзье: Ангилалуудаа 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 хийж байхад зөв удирдаад явчихад л болно.
@enkuso
Copy link

enkuso commented Apr 4, 2013

Сайхан арга байна.

@tuvshuud
Copy link

Cool. Bolood yavchihlaa. Bayarllaa

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment