bfj Posted February 26, 2010 Report Share Posted February 26, 2010 (edited) Sveicināti! Problēma ir sekojoša - nepieciešams izveidot hierarhisku struktūru vairākiem objektiem. Piemēram - tēma (var būt iekš citas tēmas), raksts utt... Iespaidojos no šī raksta un veidoju hierarhiju koka veidā katram objektam piesaistot kreisās un labās puses numurus. Viss ir skaisti līdz brīdim, kamēr hierarhiski jāatlasa dažāda veida objekti. Minētajā piemērā ar tēmām nav problēmu, taču, kā lai atlasa tēmas + rakstus hierarhiskai attēlošanai? Protams, pirmais, kas nāk prātā - kokā ir tikai tēmas, atlasam koku, ejam cauri katram koka elementam un atrodam atbilstošos rakstus, bet tad jāizpilda vairāki vaicājumi ar identisku uzbūvi, un gribētos atrast kādu efektīvāku pieeju. Respektīvi - gribētos to visu realizēt ar pēc iespējas minimālu vaicājumu skaitu un programatisku datu apstaigāšanu. Varbūt varētu ieviest atsevišķu tabulu, kurā reprezentēts koks (id, nr_kreisajā pusē, nr_labajā_pusē) un atbilstošajās tēmu un rakstu tabulās pievienot saiti uz koka tabulas atbilstošo rindu? Varbūt būtu kāds vēl efektīvāks veids? Gan jau kādam šeit ir nācies saskarties ar ko līdzīgu, tādēļ krītu ceļos un lūdzu padalīties pieredzē. :) Edited February 26, 2010 by bfj Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted February 26, 2010 Report Share Posted February 26, 2010 Ja raksts var būt tikai vienā tēmā un tēmas Tev tajā saitā ir parādītas kā dabūt (t.i. selekts kā dabūt apakškoku vienā rāvienā), tad kur ir problēma rakstus, kas droši vien ir citā tabulā, piejoinot klāt pie visām atrastajām tēmām? Pie tam, ja raksti tēmas nemaina, tad koka elementiemvar iedot kādu nemainīgu idu, as nemainās arī tad, ja elementu kokā pārvieto, jo man liekas, ka šai modelī tikko veic elementu izmaiņas, tā citiem tas left un right arī var mainīties, attiecīgi tos kā atsauces izmantot nevar, jo tad raksti arī ceļos pa koku. Gints Plivna http://datubazes.wordpress.com Quote Link to comment Share on other sites More sharing options...
bfj Posted February 26, 2010 Author Report Share Posted February 26, 2010 (edited) Ja raksts var būt tikai vienā tēmā un tēmas Tev tajā saitā ir parādītas kā dabūt (t.i. selekts kā dabūt apakškoku vienā rāvienā), tad kur ir problēma rakstus, kas droši vien ir citā tabulā, piejoinot klāt pie visām atrastajām tēmām? Tātad - rakstam ir atslēga uz 'tēmas_id' un selekts varētu būt aptuveni šāds? SELECT * FROM raksti JOIN tēmas ON raksti.tēmas_id = tēmas.id WHERE tēmas.lft > tēmu_parent_lft AND tēmas.rgt < tēmu_parent_rgt Pie tam, ja raksti tēmas nemaina, tad koka elementiemvar iedot kādu nemainīgu idu, as nemainās arī tad, ja elementu kokā pārvieto, jo man liekas, ka šai modelī tikko veic elementu izmaiņas, tā citiem tas left un right arī var mainīties, attiecīgi tos kā atsauces izmantot nevar, jo tad raksti arī ceļos pa koku. Nu - šis nemainīgais ID ir tēmas ID. Un tieši tā, pie jebkurām koka izmaiņām jāpārrēķina left un right vērtības. Vispār diezgan loģiski, jo tas pasargātu no tādiem brīnumiem kā, piemēram, tēma ir raksta bērns. Edited February 26, 2010 by bfj Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted February 26, 2010 Report Share Posted February 26, 2010 Tātad - rakstam ir atslēga uz 'tēmas_id' un selekts varētu būt aptuveni šāds? Nu kaut kā tā droši vien, tikai padomā, vai Tev nebūs tādi gadījumi, kad ir tēma, kurā nav neviena raksta? Un vai īstenībā primāri Tu nevēlies dabūt visas tēmas un visām tēmām pielikt klāt tām atbilstošos rakstus, bet ja raksta nav, tad tēmu tik un tā redzēt? Tad būtu apmēram SELECT whatever FROM temas LEFT JOIN raksti ON (nosac) WHERE tēmu atlases nosac Gints Plivna http://datubazes.wordpress.com Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.