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
14 svar · 239 visningar · startad av OveRRidE
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*
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
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]
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]
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*
Ä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
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]
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
*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*
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*
recset är med andra ord EOF..
då får den ingen info ur databasen
------------------
*Notepad.exe for president*
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*
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]
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*