webForumDet fria alternativet

Skriv ut under-menyer...

ASP

60 svar · 1 103 visningar · startad av voigtann1

Medlem sedan juni 20019 519 inlägg
Frågan#1
<%
SQL = "Select * from menu where link=0"
set recset = databas.execute(SQL)
do until recset.eof
response.write recset("namn")&"<br>"
SQL = "SELECT * from menu where link=" &recset("id")
set recset2= databas.execute(SQL)
do until recset2.eof
response.write "--"&recset2("namn")&"<br>"
recset2.movenext
loop

recset.movenext
loop
%>

Detta är ju en snabb kod för att skriva ut 1 under rubrik... hur gör jag en kod som skriver ut under rubrik på under rubriken?

Medlem sedan juli 2001434 inlägg
#2

Menar du att du har en till undermeny?

<%
SQL = "Select * from menu where link=0"
set recset = databas.execute(SQL)
do until recset.eof
  response.write recset("namn")&"<br>"
  SQL = "SELECT * from menu where link=" &recset("id")
  set recset2= databas.execute(SQL)
  do until recset2.eof
    response.write "--"&recset2("namn")&"<br>"
    SQL = "SELECT * from menu where link=" &recset2("id")
    set recset3= databas.execute(SQL)
    do until recset3.eof
      response.write "----"&recset3("namn")&"<br>"
      recset3.movenext
    loop
    recset2.movenext
  loop

  recset.movenext
loop
%>

Dock skulle jag göra det hela som en funktion som hämtar ett recordset under den aktuella menyn... då skulle du kunna ha hur många led i menyn som helst... nu blir det ju bara 3 istället för 2

Medlem sedan juni 20019 519 inlägg
#3

jag har tänkt mig mer än tre ja... :e

Medlem sedan maj 20012 812 inlägg
#4

Det diskuteras just nu på eforum.idg.se där jag skrev ett långt inlägg om rekursivitet som är lösningen på ditt problem. Så kolla ASP & VBScript på http://eforum.idg.se

- M

Medlem sedan juni 20019 519 inlägg
#5

jag gjorde något innan:

<%
function menu(ID)
  SQL = "SELECT * FROM menu WHERE LINK = " & ID
  set Rs = databas.execute(SQL)
  Do until Rs.eof
    response.write "--" &Rs("Namn") &"<br>"
  Rs.movenext
  loop
  rs.close : set recset = nothing
end function

SQL = "Select * from menu where link=0"
set recset = databas.execute(SQL)
do until recset.eof
  response.write recset("namn")&"<br>"
  response.write menu(recset("ID"))
recset.movenext
loop
%>

Nu finns ju det i en funktion.. men som sagt.. inget speciell kod :(

fick inte din kod att köra på min databas riktigt...

Medlem sedan apr. 2001425 inlägg
#6

kolla mitt skript i skriptarkivet här på Wf :)

Medlem sedan juni 20019 519 inlägg
#7

Måste gå att fixa med mindre kod än den som finns på wF akrivet

Medlem sedan apr. 2001425 inlägg
#8

Det går att få den med mindre kod om du tar bort formatteringar etc...

Som den fungerar nu så markeras ju aktiv länk med bild m.m. ta bort det och du kommer ner i storlek.

Med denna lösning används bara en db-hämtning med getrows.
Arrayn kan du sen lagra i en application, så slipper du prata med db:n och får en supersnabb meny :)

Medlem sedan juni 20019 519 inlägg
#9

Hmm.. låter bra.. kan du ge mig de minsta koderna? :e är för lat idag.. för mycket i huvudet :e

Medlem sedan apr. 2001425 inlägg
#10

Är nog bättre att du experimenterar och förstår koden och tweakar den efter eget behov ;)

Medlem sedan maj 20012 812 inlägg
#11

Din kod är ju nästan färdig.

<%
function menu(ID)
SQL = "SELECT * FROM menu WHERE LINK = " & ID
set Rs = databas.execute(SQL)
Do until Rs.eof
response.write "--" &Rs("Namn") &"<br>"
Rs.movenext
loop
rs.close : set recset = nothing
end function

SQL = "Select * from menu where link=0"
set recset = databas.execute(SQL)
do until recset.eof
response.write recset("namn")&"<br>"
response.write menu(recset("ID"))
recset.movenext
loop
%>

Din funktion behöver bara kalla på sig själv efter det att den skrivit ut menynsnamn så här.

<%
function menu(ID)
  SQL = "SELECT * FROM menu WHERE LINK = " & ID
  set Rs = databas.execute(SQL)
  Do until Rs.eof
    response.write "--" &Rs("Namn") &"<br>"
    menu(oRs("ID"))
  Rs.movenext
  loop
  rs.close : set recset = nothing
end function
%>

Nu har du fått en rekursiv funktion. Men som sagts tidigare det blir betydligt snabbare att hämta allt på en gång med endast 1 databasanrop. Men för små menyer fungerar detta jättebra.

- M

Medlem sedan juni 20019 519 inlägg
#12

jag har tänkt mig större menyer... så all ny kod är välkommen

Medlem sedan juni 20019 519 inlägg
#13

jag fick aldrig till det som jag vill... jag ska ha en select box som ska se ut så här:
<select>
<option value="2">Gästbok</option>
<option value="3">--Skriv gästboksinlägg</option>
<option value="4">--Kolla gästbok</option>
<option value="5">----sida 2</option>
<option value="1">Forum</option>
</select>
ungefär.. så man vet vad som tillhör var....

Medlem sedan juni 20019 519 inlägg
#14

har fortfarande ingen susning om hur detta ska lösas... kanske man ska order by link,id och köra en kontroll if link = id then response.write "--" av något slag..

Medlem sedan juni 200032 967 inlägg
#15

Ja, det låter väl som ett bra lösningsförslag?

Medlem sedan juni 20019 519 inlägg
#16

Blir inte koden himla seg att ladda?

Medlem sedan juni 200032 967 inlägg
#17

Seg jämfört med vad?

Medlem sedan juni 20019 519 inlägg
#18

Tja... getrows() saken till exempel.. jag vill ju ha hela min meny lista så folk kan lägga till fler underrubriker (på mitt sätt) :e och där använder jag inte getrows utan bara select * from ... where link = 3 tex.

Medlem sedan juni 200032 967 inlägg
#19

Om frågan är "blir det segare att ställa 32432 SQL-frågor än 1?" så är svaret ja. Är frågan den omvända så är svaret nej.

Jag förstår inte frågan, men du kan säkert finna svaret när du provar. :D

Mvh

Medlem sedan juni 20019 519 inlägg
#20

Jag ska testa imorgon.. återkommer med resultat + koder (om det fungera)

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)