Visa ett inlägg
Oläst 2005-06-18, 12:08 #6
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Jag surfade runt och fick ihop en del idéer och löste problemmet!

Tänkte lite kort dela med mig av min lösning om nån som har funderat på samma sak!

Jag skapade en trädtabell. Utöver parent_id angav jag även 3 till fält:
Kod:
          id  parent_id  level  uppe  nere
post 1       1  0      1    1    8
  post 1:1     2  1      2    2    3
  post 1:2     3  1      2    4    5
  post 1:3     5  1      2    6    7
post 2       4  0      1    9    10
Med denna struktur kan man skriva extremt mycket mer flexibla sqlfrågor.
Men en enda fråga kan man få ut precis den del av trädet man vill ha
(Uppåt, neråt, djupbegränsning, sökväg etc)
Men en subquery kan man även få saker till att ärvas, både uppåt och neråt:

Följande plockar ut trädet från noden id=1
Även ett fält vid namn krav finns med, vilket ärvs neråt! (Med en OR-funktion)

Kod:
"SELECT uppe, nere FROM t1 WHERE id =".$id

"SELECT tree.*,(SELECT BIT_OR(krav) FROM t1 AS path WHERE path.upp_id <= tree.upp_id AND path.ner_id >= tree.ner_id) AS kravarv FROM t1 AS tree
WHERE tree.upp_id >= ". $uppe." AND tree.ner_id <= ".$nere
(Ta bort '=' om du vill utesluta startnoden)

Det finns väldigt mycket man kan trolla med detta, exempelvis så räknar följande column ut antalet barn:
Kod:
CAST((tree.nere - tree.uppe - 1)/2 AS UNSIGNED) AS antal_barn
Kruxet är ju att lägga till, ta bort och flyta noder, men funktionerna var inte
så svåra att skriva!

Detta löste MÅNGA av de problem jag har funderat över och förenklade massor!
Tack för hjälpen, det gav mig en del tips och ideér!

/ Lasse
Tvartom är inte uppkopplad   Svara med citatSvara med citat