Räkna antal produkter

ASP

14 svar · 292 visningar · startad av OveRRidE

Medlem sedan feb. 200112 078 inlägg
Trådstart#1

Jag har en shop med en sida som heter kategorier. På sidan kategorier.asp visas alla kategorier och dår skall även antalet produkter under varje kategori visas.
Hur gör man det smidigast? Finns det något smidigare sätt än att loopa igenom hela produkt databasen och kolla vilka produkter som har t.ex. KatId "moderkort"?

Dum frågas kanske, jag vet inte.. :)

Medlem sedan dec. 200012 464 inlägg
#2
select category,count(*) as products
  from products
 group by category

Med den frågan så får du fram antalet produkter i varje kategori.

Medlem sedan feb. 200112 078 inlägg
#3

Tack för det snabba svaret, men jag förstår inte riktigt hur jag skall använda det nu.. här har du min kod..


Dim dataPath
dataPath = Server.MapPath("\shop\databas\shop_data.mdb")

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("driver={Microsoft Access Driver (*.mdb)};dbq=" & dataPath )

Set RecSet = Server.CreateObject("ADODB.Recordset")
OpenDatabas = "SELECT * FROM kat ORDER BY id"

RecSet.Open OpenDatabas, Connect, adOpenStatic, adLockOptimistic
%>

Och hur skriver jag ut resultatet (allså antalet produkter i varje kategori) på sidan sen då?

Medlem sedan dec. 200012 464 inlägg
#4

Jag antar att du har en tabell, produkter där det finns en kolumn katId som anger vilken kategori en produkt tillhör. I så fall skulle man kunna använda ungefär denna kodsnutt.


Dim dataPath
dataPath = Server.MapPath("\shop\databas\shop_data.mdb")

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("driver={Microsoft Access Driver (*.mdb)};dbq=" & dataPath )

Set RecSet = Server.CreateObject("ADODB.Recordset")
OpenDatabas = "SELECT kategori,count (*) as produkter FROM kat k,produkt p
where k.id = p.katid group by kategori  ORDER BY id"

RecSet.Open OpenDatabas, Connect, adOpenStatic, adLockOptimistic
if  not Recset.eof then
  response.write "kategori " & " antal <br>"
while not recset.eof
  response.write recset("kategori") & " " & recset("produkter") & "<br>"
  recset.movenext
wend
end if
recset.close
connect.close
%>
Medlem sedan feb. 200112 078 inlägg
#5

Nja, den vill inte.

Lite databas beskrivning (eftersom jag inte fattar jota av SQL-frågan)

Två tabeller, "kat" och "produkter".
I Kat, kolumner:
- KatId
- Kategori

I Produkter, kolumner:
- KatId
- Id (pr. nyckel)
- Beskr
- osv (irrelevant)

Sorry for my stupidity..

Feltyp:
ADODB.Recordset (0x800A0BB9)
Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt.
/shop/test.asp, line 13
Medlem sedan dec. 200012 464 inlägg
#6

Är det här rad 13?

RecSet.Open OpenDatabas, Connect, adOpenStatic, adLockOptimistic

I så fall beror det nog på att du inte har gjort include på adovbs.inc. Nu behöver man inte använda open i detta fall, utan man kan skriva om det så här


Dim dataPath
dataPath = Server.MapPath("\shop\databas\shop_data.mdb")

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("driver={Microsoft Access Driver (*.mdb)};dbq=" & dataPath )

OpenDatabas = "SELECT kategori,count (*) as produkter FROM kat k,produkt p
where k.id = p.katid group by kategori ORDER BY id"

set RecSet = Connect.execute(OpenDatabas)
if not Recset.eof then
response.write "kategori " & " antal <br>"
while not recset.eof
response.write recset("kategori") & " " & recset("produkter") & "<br>"
recset.movenext
wend
end if
recset.close
connect.close
%>
Medlem sedan feb. 200112 078 inlägg
#7

Sorry jag är helt konstig idag.. självklart hade jag glömt adovbs.inc..
*sårry*

Nu ligger felet här:

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access Driver] The specified field 'id' could refer to more than one table listed in the FROM clause of your SQL statement.
/shop/test.asp, line 14

Så ser koden ut nu:

OpenDatabas = "SELECT kategori,count (*) as produkter FROM kat k,produkter p where k.katid = p.id group by kategori ORDER BY id"
Medlem sedan dec. 19998 577 inlägg
#8

Du måste ange ifrån vilken tabell som du hämtar id, t.ex:

ORDER BY p.id

Medlem sedan feb. 200112 078 inlägg
#9

*sucka*

har inte använt så krångliga SQL-frågor innan...

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'p.id' as part of an aggregate function.
/shop/2.asp, line 19

Medlem sedan dec. 200012 464 inlägg
#10

OpenDatabas = "SELECT kategori,k.id,count (*) as produkter FROM kat k,produkt p
where k.id = p.katid group by kategori,k.id ORDER BY k.id"

så kanske.

Medlem sedan feb. 200112 078 inlägg
#11

Mmm nu exekverade den SQL-frågan rätt iaf, men jag får ingen output ur Response.Write ...

hmm

tom html sida

Medlem sedan feb. 200112 078 inlägg
#12

recset är med andra ord EOF..

då får den ingen info ur databasen

Medlem sedan feb. 200112 078 inlägg
#13

Nu funkar det..

Rätt kod


OpenDatabas = "SELECT kategori,k.id,count (*) as produkter FROM kat k,produkter p where k.katid = p.katid group by kategori,k.id ORDER BY k.id"

Bytte "..WHERE k.id.." mot "..WHERE k.Katid.."

Tack killar! Jag har ju alltid sagt det!! Det bästa stället hitta svar på sina frågor!

Medlem sedan dec. 200012 464 inlägg
#14

Jag såg i din tabellbeskrivning att det finns en kolumn katid i tabellen kat. I så fall så borde det bli

OpenDatabas = "SELECT kategori,k.katid,count (*) as produkter FROM kat k,produkt p
where k.katid = p.katid group by kategori,k.katid ORDER BY k.katid"

Finns det en kolumn som heter id också, annars borde det bli fel.

Red: Ännu ett sent och onödigt inlägg.

Medlem sedan feb. 200112 078 inlägg
#15

Jo det har du rätt i, jag ändrade igen..

Nu skall vi se.. rätt kod för detta är alltså.. *trumvirvel* ..

OpenDatabas = "SELECT kategori,k.katid,count (*) as produkter FROM kat k,produkter p where k.katid = p.katid group by kategori,k.katid ORDER BY k.katid"

Tada..

Sådär.. tack igen. :e

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