webForumDet fria alternativet

Räkna antal produkter

ASP

14 svar · 239 visningar · startad av OveRRidE

Medlem sedan feb. 200112 078 inlägg
Frågan#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.. :)

------------------
*Notepad.exe for president*

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.

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

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å?

------------------
*Notepad.exe for president*

[Redigerat av OveRRidE den 24 maj 2001]

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
%>

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

[Redigerat av LarsG den 24 maj 2001]

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

------------------
*Notepad.exe for president*

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
%>

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

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"

------------------
*Notepad.exe for president*

[Redigerat av OveRRidE den 24 maj 2001]

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

------------------
Budweiser - Slightly contaminated water... probably harmless, but I would recommend boiling before you drink it...
webEye.nu SweQuake.com

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

------------------
*Notepad.exe for president*

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.

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

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

------------------
*Notepad.exe for president*

Medlem sedan feb. 200112 078 inlägg
#12

recset är med andra ord EOF..

då får den ingen info ur databasen

------------------
*Notepad.exe for president*

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!

------------------
*Notepad.exe for president*

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.
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 24 maj 2001]

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

------------------
*Notepad.exe for president*

272 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)