Jump to content
php.lv forumi

Hierahija koka veidā starp vairāku tabulu ierakstiem


bfj

Recommended Posts

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 by bfj
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by bfj
Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...