Hej! Tycker att du ska göra om databasen istället. En tabell för kategorier och en tabell för böcker. Vill du sedan utöka databasen med författare så är det bara att skapa en tabell för författare oxå. Du kommer förmodligen att behöva några kopplingstabeller oxå. Mitt tips är att du läser på mer om databaser och normalformerna så kommer allt att lösa sig av sig självt i framtiden. Hej, Jo, tack så jätte, jättemycket för hjälpen! Hej igen, Du skall inte använd 0. Null är ett bättre värde eftersom du då kan behålla referensintegritet. Du borde ha spö för att du är så grym! Du kan även använda din datastruktur för att skapa Bread Crumb TrailSQL, välja underkategorier
Jag har en databas som ser ut såhär i access.
Jag ska plocka ut "name" ut bokstavsordning, men om "belongsToCategory" är större än noll ska den hamna direkt under sin kategori.
Vad ska jag använda för SQL-sträng?
id belongsToCategory name description
33 Böcker Alla sorters böcker
35 33 Fantasy
37 33 Hästböcker Hästböcker finns det massor. Men vilka är bäst?
38 35 Harry Potter
39 Serier Alla sorters serier
42 39 Dragonball av Akira Toriyama
43 Mitt bibliotek Berätta vad som är bra eller dåligt med ditt bibliotek. Eller beskriv ditt drömbibliotek!
44 33 Tvillingarna av Francine Pascal Är du en tvillingarna fan? Skriv här då!
45 Hemsidor och datorer Har du tips och frågor om hur du gör hemsidor eller grejar med datorn? Gå hit då!
46 43 Barnens bibliotek Vad är bra och vad är dåligt? Vad saknas?
47 Djur
48 Författare
T.ex:
Böcker, Böcker : Fantasy, Böcker : Fantasy : Harry Potter, Böcker : Hästböcker osv...
Mycket tacksam för hjälp!Sv: SQL, välja underkategorier
/HMLSv: SQL, välja underkategorier
Här kommer ett exempel på hur du bygger upp det hela.
Exempel tabell:
DepId DepIdp Description
1 0 Böcker
2 1 Fantasy
3 1 Datorer
4 0 Cd-skivor
5 4 Cd rea
1. För att nu plocka ut samtliga huvudrubriker, dvs där kolumnen DepIdP är lika
med noll.
<code>
select DepId, Description from tabell where depidp = 0 order by description asc
</code>
Ger resultatet:
1 Böcker
4 Cd-skivor
2. För att plocka ut vilka underrubriker som finns i angiven huvudrubrik
<code>
select DepId, Description from tabell where depidp = 1
</code>
Ger resultatet:
2 Fantasy
3 Datorer
Det är rekommenderat att skapa en tabell som ovan, där du enbart lagrar
huvud- och underriker, sätt där DepId som PRIMARY KEY, och AUTO_INCREMENT.
I den tabell där du sedan lagrar t.ex böcker, cd-skivor mm, i den tabellen ska det
finnas en DepId kolumn som är en FOREIGN KEY till DepId i tabellen för huvud-
och underrubriker.
Lycka tillSv: SQL, välja underkategorier
Ungefär så långt har jag också kommit.
Kruxet är att jag ska loopa underrubrikerna samtidigt som rubrikerna.
Börjar mest första, kollar _om_ det finns underrubriker. Gör det det så skriver jag ut dem. Sen kommer det svåra, jag ska kolla om det finns underrubriker till underrubrikerna.
Och jag vet inte hur jag ska få skriptet att självt kolla hur långt ner underrubrikerna går innan det ska tillbaka upp till nästa rubrik...
Nån idé?Sv: SQL, välja underkategorier
frågan är hur många nivåer du kommer att använda i din navigering bland rubriker och underrubriker, samt om du måste ladda allting med en gång.
Behöver du ladda allt i ett svep du kan skapa tre Recordset, om du använder tre nivåer.
Exempel:
<code>
dim rshrub, rsurub, rsuurub
Set rshrub = createobject("ADODB.Recorset")
Set rsurub = createobject("ADODB.Recorset")
Set rsuurub = createobject("ADODB.Recorset")
'Hämta huvudrubriker
rshrub.open "select depid, depidp, description from tabell where depidp=0 order by description asc", [connectstring]
if not rshrub.eof then
do until rshrub.eof
' skriv ut huvudrubriken
response.write rshrub("description") & "<br>"
' hämtar underrubriker 1
rsurub.open "select depid, depidp, description from tabell where depidp=" & rshrub("depid") & " order by description asc", [connectstring]
if not rsurub.eof then
do until rsurub.eof
' skriv ut underrubriker 1
response.write rsurub("description") & "<br>" '
' hämtar underrubrikerna 2 (till underrubrik 1)
rsuurub.open "select depid, depidp, description from tabell where depidp=" & rsurub("depid") & " order by description asc", [connectstring]
if not rsuurub.eof then
do until rsuurub.eof
' skriv ut underrubriker 2
response.write rsuurub("description")
rsuurub.movenext
loop
rsuurub.close
end if
rsurub.movenext
loop
rsurub.close
end if
rshrub.Movenext
loop
rshrub.close
end if
set rshrub = Nothing
set rsurub = Nothing
set rsuurub = Nothing
</code>Sv: SQL, välja underkategorier
*Om du vill lista en herarki kan du skriva:
<code>
Function ListStuff(con, rs)
Dim rsSub
Set rsSub = Server.CreateObject("ADODB.Recordset")
Response.Write "<UL>"
Do Until rs.EOF
Response.Write "<LI>" & rs("description") & "</LI>"
rsSub.Open "SELECT depid, description FROM tabell WHERE depidp = " & rs("depid") & " ORDER BY description ASC", Con
If rs.BOF And rs.EOF Then
Else
ListStuff con, rsSub
End If
rsSub.Close
rs.MoveNext
Loop
Response.Write "</UL>"
Set rsSub = Nothing
End Sub
Dim rs
Dim con
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "<<<Din connectstring>>>"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT depid, description FROM tabell WHERE depidp Is Null ORDER BY description ASC", Con
If rs.BOF And rs.EOF Then
Respons.Write "Det finns inga poster!"
Else
ListStuff con, rs
End If
rs.Close
Set rs= Nothing
con.Close
Set con = Nothing
</code>
Bör fungerar oavsett hur många nivåer du har.Sv: SQL, välja underkategorier
Här kan resultatet beskådas: http://www.bibl.vgregion.se/barn/bokforum/viewCategoriesAndThreads.asp
Och Andreas, vänta dig en present på posten om jag får din adress! (Jag tjänar ju pengar på detta egentligen)Sv: SQL, välja underkategorier
.
Se inlägg för kodexempel:
[Bread Crumb Trail]