---
title: "Räkna antal produkter"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/9710-räkna-antal-produkter"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "OveRRidE"
published: "2001-05-24T18:43:00.000Z"
updated: "2001-05-24T22:57:00.000Z"
replies: 14
views: 292
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/9710-räkna-antal-produkter"
---

# Räkna antal produkter

## #1 — OveRRidE, 2001-05-24T18:43Z

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.. :)

Permalänk: https://www.webforum.nu/p/9710

## #2 — LarsG, 2001-05-24T18:50Z

```
select category,count(*) as products
  from products
 group by category
```

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

Permalänk: https://www.webforum.nu/p/270005

## #3 — OveRRidE, 2001-05-24T19:34Z

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

Permalänk: https://www.webforum.nu/p/270006

## #4 — LarsG, 2001-05-24T19:52Z

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

Permalänk: https://www.webforum.nu/p/270007

## #5 — OveRRidE, 2001-05-24T20:03Z

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

Permalänk: https://www.webforum.nu/p/270008

## #6 — LarsG, 2001-05-24T20:11Z

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

Permalänk: https://www.webforum.nu/p/270009

## #7 — OveRRidE, 2001-05-24T20:15Z

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"
```

Permalänk: https://www.webforum.nu/p/270010

## #8 — Vide, 2001-05-24T20:17Z

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

ORDER BY p.id

Permalänk: https://www.webforum.nu/p/270011

## #9 — OveRRidE, 2001-05-24T20:20Z

\*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

Permalänk: https://www.webforum.nu/p/270012

## #10 — LarsG, 2001-05-24T20:23Z

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.

Permalänk: https://www.webforum.nu/p/270013

## #11 — OveRRidE, 2001-05-24T20:26Z

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

 hmm 

tom html sida

Permalänk: https://www.webforum.nu/p/270014

## #12 — OveRRidE, 2001-05-24T20:28Z

recset är med andra ord EOF.. 
 
då får den ingen info ur databasen

Permalänk: https://www.webforum.nu/p/270015

## #13 — OveRRidE, 2001-05-24T20:31Z

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!

Permalänk: https://www.webforum.nu/p/270016

## #14 — LarsG, 2001-05-24T20:37Z

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.

Permalänk: https://www.webforum.nu/p/270017

## #15 — OveRRidE, 2001-05-24T22:57Z

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

Permalänk: https://www.webforum.nu/p/270018

---

Tråden på webben: https://www.webforum.nu/amne/asp/9710-räkna-antal-produkter
