webForumDet fria alternativet

Sortering med rubriker

ASP

10 svar · 203 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Jag ska göra en lista på några saker.
Vi tar ett exempel:

Här har jag en databas med innehållet.
Namn: << kategoriID
blå << 1
grön <<1
lila <<1
fiat <<2
volvo <<2
audi <<2

Av detta innehåll i databasen vill jag få ut detta:

Färger:
blå
grön
lila

Bilar:
fiat
volvo
audi

Måste jag göra flera sökningar eller räcker det med en. För kategori sifrornna tänkte jag avända mig av
en case sats.

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#2
set connect = server.createobject("adodb.connection")
set rs = connect.execute("select * from katergorier order by kategoriid")

kategori = cint(0)
while not rs.eof
  if kategori <> cint(rs("kategoriID")) then
     response.write "<br>"
     kategori = cint(rs("kategoriID")) 
     if kategori = 1 then
        resposne.write "Färger: <br>"
     elseif kategori = 2 then
        response.write "Bilar: <br>"
     end if
  end if
  response.write rs("namn")
  rs.movenext
wend
rs.close
connect.close

eller jag kanske missuppfattade det där med kategorierna. Har du någon tabeller där du lagrar kategorinamn och som du kan joina med.

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

Medlem sedan jan. 20013 406 inlägg
#3

Jag ska nog ha en tabell istället med kategorierna eftersom det kan bli några stycken. En join sats är säkert bättre då. Men hur?

Jag ska även ha pagecount på sidan så att raderna inte blir för många. Kommer det att fungera som vanligt med sidbläddring om man gör en join

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#4

Jag ska nog ha en tabell istället med kategorierna eftersom det kan bli några stycken. En join sats är säkert bättre då. Men hur?

Om din tabell med olika kategorier ser ut så här

KATEGORI
--------
ID!KATEGORI
--------
1!Färger
2!Bilar

och om din andra tabell som du visade heter produkter så skulle det kunna se ut så här

set connect = server.createobject("adodb.connection")
set rs = connect.execute("select * from katergorier as k inner join produkter as p on p.kategorid = k.id order by k.kategori")
kategori = ""
while not rs.eof
if kategori <> rs("kategori")) then
response.write "<br>"
kategori = rs("kategori) 
resposne.write kategori & "<br>"
response.write rs("namn")
rs.movenext
wend
rs.close
connect.close

Jag ska även ha pagecount på sidan så att raderna inte blir för många. Kommer det att fungera som vanligt med sidbläddring om man gör en join

Ja, det blir ingen skillnad där

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

Medlem sedan jan. 20013 406 inlägg
#5

Tabellerna ser ut på detta sätt

Refrenser:
referens_namn
referens_foretag

referensforetag
ID
foretag

ID är samma som referensforetag.

Jag får däremot inte min kod att fungera

' Öppna dataförbindelsen
Set con = Server.CreateObject("ADODB.Connection")
con.Open Application("databas")

pg = TRIM( Request( "pg" ) )
IF pg = "" THEN pg = 1 

Set referensRS = Server.CreateObject( "ADODB.Recordset" )
referensRS.ActiveConnection = Con
referensRS.CursorType = adOpenStatic
referensRS.CursorLocation = adUSEClient
referensRS.Pagesize = 3

sqlString = "select referens_namn, referens_foretag, foretag" &_
"FROM referensforetag as k inner join referenser as r on r.referens_foretag = k.id "&_
"order by k.foretag"
kategori = ""
WHILE NOT referensRS.eof
IF kategori <> referensRS( "foretag" ) then
response.write "<br>"
kategori = referensRS( "foretag" ) 
resposne.write kategori & "<br>"
response.write referensRS("referens_namn")
referensRS.MoveNext
WEND

referensRS.close
set referensRS = nothing
con.close
set con = nothing
%>

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#6
sqlString = "select referens_namn, referens_foretag, foretag" &_
" FROM referensforetag as k inner join referenser as r on r.referens_foretag = k.id "&_
" order by k.foretag"

Det saknas en blank framför FROM

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

Medlem sedan jan. 20013 406 inlägg
#7

Jag har ändrat några stavfel och ett uteblivet end if, men det fungerar inte får felmeddelandet

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 2 förväntades.
/arkivet/test.asp, line 26

Rad 26 gäller SQL frågan

Set referensRS = Server.CreateObject( "ADODB.Recordset" )
referensRS.ActiveConnection = Con
referensRS.CursorType = adOpenStatic
referensRS.CursorLocation = adUSEClient
referensRS.Pagesize = 3

sqlString = "select referens_namn, referens_foretag, foretag " &_
"FROM referenskategori as k inner join referenser as r on r.referens_foretag = k.id " &_
" ORDER BY k.foretag"
referensRS.Open sqlString
referensRS.AbsolutePage = pg
referenser = referensRS.RecordCount
response.write sqlstring

kategori = ""
WHILE NOT referensRS.EOF
IF kategori <> referensRS( "foretag" ) THEN
response.write "<br>"
kategori = referensRS( "foretag" ) 
response.write kategori & "<br>"
END IF
response.write referensRS("referens_namn")
referensRS.MoveNext
WEND

referensRS.close
set referensRS = nothing
con.close
set con = nothing

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#8

Det felmeddelandet får man om man anger en kolumn eller tabell som inte finns definierad.

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

Medlem sedan jan. 20013 406 inlägg
#9

Ändrade lite till och nu får jag detta meddelande:

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access] Kopplingsuttrycket stöds inte.

sqlString = "select r.referens_namn, r.referens_foretag, k.foretag " &_
"FROM referenskategori as k inner join referenser as r " &_
"ON referens_foretag = k.id  " &_
" ORDER BY k.foretag"

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#10

Jag vet inte vad som orsakar det felet. Du kan ju testa med någon av dessa varianter.

sqlString = "select r.referens_namn, r.referens_foretag, k.foretag " &_
"FROM referenskategori as k inner join referenser as r " &_
"ON [b]r.[/b]referens_foretag = k.id " &_
" ORDER BY k.foretag"

eller

sqlString = "select r.referens_namn, r.referens_foretag, k.foretag " &_
"FROM referenskategori as k ,referenser as r " &_
"where r.referens_foretag = k.id " &_
" ORDER BY k.foretag"

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

Medlem sedan jan. 20013 406 inlägg
#11

Jag fick igång det tillslut. Jag ändrade lite namn i tabellerna så det blev lite mer lättförståligt.

Tack för hjälpen LarsG.

sqlString = "SELECT * " &_
"FROM foretag, kategori " &_
"WHERE foretag_kategori = kategori_id " &_
" ORDER BY kategori_id DESC, foretag_namn "
referensRS.Open sqlString
referensRS.AbsolutePage = pg
referenser = referensRS.RecordCount

kategori = ""
WHILE NOT referensRS.EOF
IF kategori <> referensRS( "Kategori_namn" ) THEN
response.write "<br>"
kategori = referensRS( "kategori_namn" ) 
response.write "<b>"& kategori & "</b><br>"
END IF
response.write referensRS("foretag_namn") & "<br>"
referensRS.MoveNext
WEND

referensRS.close
set referensRS = nothing
con.close
set con = nothing

------------------
Adde

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)