webForumDet fria alternativet

Sökmotor bland länksamling

ASP

27 svar · 417 visningar · startad av Pace · sida 2 av 2

Frågan, av Pace

Har tänkt att lägga upp en struktur för en länksamling som är tänkt att expandera kraftigt. Därför har jag beslutat att dela in länkarna i kategorier samt i underkategorier. Och då till frågan: Ska jag göra själva kategoriseringen i databasen, eller i en fil för sig? För-/nackdelar? \------------------ "Tål det inte att skämtas om, är det inte värt att ta på allvar."

Läs frågan i sin helhet →
Medlem sedan juni 20019 024 inlägg
#21

Jaja, jag fick lösa det med joins.

Har lagt alla kategorier i en och samma tabell. Men nu vill jag rita upp en snygg Select-lista där jag spaltar upp kategorierna med underkategorierna under. Hur gör jag det?

Link_Categories
---------------
Cat_ID - Cat_Name - Cat_ParentID

Där det sista fältet gör att posten motsvarar en underkategori till en överkategori (Cat_ID).

Exempel:

1 - Film - null
2 - Företag - null3
3 - Svensk - 1
4 - Uthyrning - 2

[b]Resultat:[/b]

Film
- Svensk

Företag
- Uthyrning

------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

Medlem sedan dec. 200012 464 inlägg
#22
sub getTree(connect,id,level)
dim sql,rs,i
if isnull(id) then
   sql = "select cat_id,cat_name from link_categories where parent_id is null"
else
   sql = "select cat_id,cat_name from link_categories where parent_id = " & id
end if
set rs = connect.execute(sql)

while not rs.eof 
  for i = 0 to level - 1
      response.write "-"
  next
  response.write rs("cat_name") & "<br>"
  getTree connect,rs("cat_id"),level+1
  if level = 0 then
     response.write "<br>"
  end if
  rs.movenext
wend
rs.close
set rs = nothing
end sub

set connect = server.createobject("adodb.connection")
connect.open "dsn"

getTree connect,null,0

connect.close
set connect = nothing

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 20 dec 2001]

Medlem sedan juni 20019 024 inlägg
#23

Blev tyvärr en evighetsgrej det där :(.
Finns det inget annat sätt så att man kör med färre SQL satser? T.ex. att ladda in allt i en matris och sedan köra sorteringen från ASP koden?

------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

Medlem sedan dec. 200012 464 inlägg
#24

Det är en fördel om man gör movenext också.

while not rs.eof 
for i = 0 to level - 1
response.write "-"
next
response.write rs("cat_name") & "<br>"
getTree connect,rs("cat_id"),level+1
if level = 0 then
response.write "<br>"
end if
[b]rs.movenext[/b]
wend

/r
Det är fördel om man skriver rätt också
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 20 dec 2001]

Medlem sedan dec. 200012 464 inlägg
#25

T.ex. att ladda in allt i en matris och sedan köra sorteringen från ASP koden?

så här alltså

sub getTree(a,id,level)
dim i,j

for i = 0 to ubound(a,1)
    if  a(i,2) = id or ( isnull(id) and isnull(a(i,2)) then
        for j = 0 to level - 1
            response.write "-"
        next
        response.write a(i,1) & "<br>"
        getTree a,a(i,0),level+1
        if  level = 0 then
            response.write "<br>"
        end if
    end if
next
end sub

set connect = server.createobject("adodb.connection")
connect.open "dsn"

set rs = connect.execute("select * from link_categories")

if not rs.eof then
   a = rs.getrows()
   getTree a,null,0
end if

?

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20019 024 inlägg
#26

Precis! Men... Slut på stackutrymme. ;)

(räknade looparna: 9 000 st innan felmeddelandet! :O)

Verkar som det blev en evighetsgrej det där också? ;)

------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

[Redigerat av Pace den 20 dec 2001]

Medlem sedan dec. 200012 464 inlägg
#27

Hmm

sub getTree(a,id,level,startAt)
dim i,j
for i = startAt to ubound(a,1)
if a(i,2) = id or ( isnull(id) and isnull(a(i,2)) then
for j = 0 to level - 1
response.write "-"
next
response.write a(i,1) & "<br>"
getTree a,a(i,0),level+1,i+1
if level = 0 then
response.write "<br>"
end if
end if
next
end sub

set connect = server.createobject("adodb.connection")
connect.open "dsn"
set rs = connect.execute("select cat_id, cat_name, cat_parentID from link_categories order by cat_parentID")

if not rs.eof then
a = rs.getrows()
getTree a,null,0,0
end if

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20019 024 inlägg
#28

Det fixade sig till slut! :) :D

Du har råkat använda index 1 istället för 2 i matrisen:

sub getTree(a,id,level,startAt)
	dim i,j
	for i = startAt to ubound[b](a,2)[/b]
		if [b]a(2, i)[/b] = id or ( isnull(id) and isnull([b]a(2,i)[/b])) then
			for j = 0 to level - 1
			response.write "-"
			next
			
			response.write [b]a(1, i)[/b] & "<br>"
			getTree a, [b]a( 0, i)[/b], level+1, i+1
			
			if level = 0 then
			response.write "<br>"
			end if
		end if
	next
end sub

Jag tackar ödmjukast!
Du är en sann tillgång till wF, LarsG!

------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

[Redigerat av Pace den 20 dec 2001]

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)