[asp][ms sql]tellen van 24 waardes

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
Hoi,

heb nu een database in MS SQL. Daarin staan ongeveer 30.000 records. 1 record bestaat uit:

id|naam|email|imghr|volgnummer
1|klara|klara@host.com|afbeelding1.jpg|1|
2|kees|kees@host.com|afbeelding2.jpg|1|
etc. etc.

Nu wil ik dus zien welke afbeeldingen het meest in de db voorkomen.

Nu dacht ik dit te doen dmv van het volgende:
code:
1
"SELECT COUNT(imghr) as aantalhr1 WHERE imghr = 'afbeelding1.jpg'"

Allemaal leuk en aardig, maar ik heb dus 24 afbeeldingen. Betekent dit dat ik 24 x zo'n select moet uitvoeren op die 30.000 records of is er een makkelijkere constructie?

Ik wil namelijk in 1 pagina kunnen zien (dmv staafdiagrammen) welke het meeste voorkomt.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 21-08 19:07

dominic

will code for food

Zoek eens op het gebruik van de GROUP BY clause, vind je ongetwijfeld iets bruikbaars bij.

Download my music on SoundCloud


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
GROUP BY ... HAVING etc. etc.

Maar dan moet ik toch nog 24 x die select uit voeren?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Door die group bij kan je de 24 records in 1x terug krijgen...
Met count's per afbeelding etc.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
niet 24 records he...

+/- 30.000 records met daarin afbeelding 1 tm 24.

Maar dat moet wel kunnen met GROUP BY?
Dacht dat het niet kon met group by..

nahjah, dan maar dieper in groupp by duiken

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Vigory
  • Registratie: November 2000
  • Laatst online: 15-04 10:26
SELECT imghr, COUNT(imghr) as aantalhr
FROM afbeeldingen
GROUP BY imghr

Dit geeft 24 records terug:
afbeelding aantal
afbeelding1.jpg 5
afbeelding2.jpg 3
afbeelding3.jpg 98


Of is dat juist niet wat je wil?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
hmm...

een simpele response.write aantalhr werkt niet.

Ik hoop dat ik jouw goed begrijp maar:

Ik wil dus per afbeelding het aantal tellen.

afbeelding 1: 241 x
afbeelding 2: 3 x

enz. enz...

Zoals ik hetzelf voor ogen had kom ik dus op 24 x een SELECT uit...
Die group by moet toch ook een waarde hebben om op te selecten?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 01 juli 2002 16:34 schreef TeeDee het volgende:
Die group by moet toch ook een waarde hebben om op te selecten?
Er staat een leuke group by query boven je post, voer die dan es uit!
Nee dus, zoals ik ook al zei, met die group by query krijg je in principe 24 records met de counts per afbeelding.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
Owke,

ik heb die query nu lopend... (of te wel: krijg geen error)

Hoe lees ik dat nu uit? Een
code:
1
response.write "Het aantal: "&rs_telimg("imglr")&"<br>"

Geeft als output 1

Dat klopt dus niet... komen er iets van arrays terug?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Je moet eerst COUNT doen en dan groeperen bij GROUP BY image. Dan kan je met de MAX(image) functie de grootste waarde kiezen..

'SELECT COUNT(Imghr) as Aantal FROM Afbeeldingen WHERE MAX(Aantal) GROUP BY imghr'

oid.. is al weer tijdje geleden :)
Op maandag 01 juli 2002 16:24 schreef Vigory het volgende:
SELECT imghr, COUNT(imghr) as aantalhr
FROM afbeeldingen
GROUP BY imghr

Dit geeft 24 records terug:
afbeelding aantal
afbeelding1.jpg 5
afbeelding2.jpg 3
afbeelding3.jpg 98


Of is dat juist niet wat je wil?
Ja maar dan wil ie dus de grootste waarde heb, en die kun je krijgen met MAX..

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
Hmm, wist niet dat dat kon (het werkt alleen niet)

Heb dit allemaal al geprobeerd:
code:
1
"SELECT COUNT(imglr) as aantallr FROM dbo.orders GROUP BY imglr WHERE MAX(aantallr)"


code:
1
"SELECT COUNT(imglr) as aantallr FROM dbo.orders WHERE MAX(aantallr) GROUP BY imglr"

Kan dit wel met MS SQL server?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Op dinsdag 02 juli 2002 11:25 schreef TeeDee het volgende:
Hmm, wist niet dat dat kon (het werkt alleen niet)

Heb dit allemaal al geprobeerd:
code:
1
"SELECT COUNT(imglr) as aantallr FROM dbo.orders GROUP BY imglr WHERE MAX(aantallr)"


code:
1
"SELECT COUNT(imglr) as aantallr FROM dbo.orders WHERE MAX(aantallr) GROUP BY imglr"

Kan dit wel met MS SQL server?
Misschien moest dat MAX wel bij HAVING.. Weet het niet helemaal precies meer..

Maar wil je nu ALLEEN degene die het meeste voorkomt of gewoon een overzicht van allemaal?? Anders is de oplossing volgens mij eerder al gegeven..
Kan dit wel met MS SQL server?
Weet ik niet zeker.. Met access volgens mij wel..

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
Ik wil een overzicht van alle voorkomende afbeeldingen (24 stuks) met daarachter de aantallen. Dus hoevaak die in de db staan.

En die oplossing heb ik al geprobeerd, alleen dan krijg ik dus output 1

(vrij lullig in een db van 30.000 records)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Dan lijkt me dit toch echt te moeten werken

SELECT imghr, COUNT(imghr) as Aantal FROM afbeeldingen GROUP BY imghr

Hij geeft eerst alle imghr weer, dan de count van de totalen die gegroepeerd zijn... Maar die was hierboven d8 ik ook al gegeven.. Wel alle namen helemaal gelijk aan DB?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
nope:

zmp1_lr.jpg
zmp2_lr.jpg
...
zmp24_lr.jpg
img1
img2

etc. etc.

Dit zijn gewone "char"'s

Ik doe dus na de query een simpele response.write van aantal en die geeft als uitput 1
That's it... zo ontzettend vaag

Zelfs ook nog geprobeerd met een Do while not recordset.eof etc. etc.
Niks nada noppes

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Reut
  • Registratie: September 2001
  • Laatst online: 04-05 11:46

Reut

Tjoepie, nu met schroefdoppie

Op dinsdag 02 juli 2002 11:05 schreef TeeDee het volgende:
Owke,

ik heb die query nu lopend... (of te wel: krijg geen error)

Hoe lees ik dat nu uit? Een
code:
1
response.write "Het aantal: "&rs_telimg("imglr")&"<br>"

Geeft als output 1

Dat klopt dus niet... komen er iets van arrays terug?
Gebruik je in voorgaand voorbeeld niet de veldnaam?
Volgens mij moet je de alias uit de query gebruiken(aantallr).

Boom......Boom......Boom......Boom......Boom......booooooooooom


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Voer de query es in een andere client uit, er is toch zo'n query test ding van mssql ?

Die query doet namelijk in principe wat jij wilt, dat er kleine randvoorwaarden in jouw db zijn die wel of niet getest moeten worden is natuurlijk aan jou om er bij te zetten.

Eventueel kan je van die count nog een count( * ) maken.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
ja.. was een foutje... solly (had stiekem het e.e.a aangepast)
code:
1
2
3
rs_telimg.Source = "SELECT imglr, COUNT(imglr) as aantallr FROM dbo.orders GROUP BY imglr"

response.write "Het aantal is: "&rs_telimg("aantallr")&"<br>"

Heart..pumps blood.Has nothing to do with emotion! Bored


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Op dinsdag 02 juli 2002 11:37 schreef TeeDee het volgende:
nope:

zmp1_lr.jpg
zmp2_lr.jpg
...
zmp24_lr.jpg
img1
img2

etc. etc.

Dit zijn gewone "char"'s

Ik doe dus na de query een simpele response.write van aantal en die geeft als uitput 1
That's it... zo ontzettend vaag

Zelfs ook nog geprobeerd met een Do while not recordset.eof etc. etc.
Niks nada noppes
Kan het niet gewoon zijn dat die uitput 1 juist is en dat het plaatje maar 1 keer voorkomt?? Je kan wel de aantallen sorteren door ORDER BY MAX(imghr) (als msql dat tenminste kent)

Maak een loop die eerst naar het eerste record gaat en tot EOF de naam + aantal geeft (vergeet movenext niet).. Krijg je dan wel alle records gewoon?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
hmm..

in de query analyzer werkt ie idd wel gewoon...

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Reut
  • Registratie: September 2001
  • Laatst online: 04-05 11:46

Reut

Tjoepie, nu met schroefdoppie

Wat werkt er nu dan niet in asp?

Je moet wel door de recordset loopen (?).

Boom......Boom......Boom......Boom......Boom......booooooooooom


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Op dinsdag 02 juli 2002 11:46 schreef TeeDee het volgende:
hmm..

in de query analyzer werkt ie idd wel gewoon...
De query is volgens mij ook goed.. Hoe heb je je ASP script nu? Doe je die loop idd wel goed?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--#include file="../includes/Connsql.asp" -->
<%
set rs_telimg = Server.CreateObject("ADODB.Recordset")
rs_telimg.ActiveConnection = connsql
rs_telimg.Source = "SELECT imghr, COUNT(*) as aantal FROM dbo.orders GROUP BY imghr ORDER BY MAX(imghr)"
rs_telimg.CursorType = 0
rs_telimg.CursorLocation = 2
rs_telimg.LockType = 3
rs_telimg.Open()
rs_telimg_numRows = 0

Do while not rs_telimg.eof and rs_telimg.bof
response.write "Beeldnaam is: "&rs_telimg("imghr")&" | aantal keer: "&rs_telimg("aantal")&"<br>"
rs_telimg.movenext
loop
%>

Heart..pumps blood.Has nothing to do with emotion! Bored


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Do while not rs_telimg.eof and rs_telimg.bof
Haal dat and rs_telimg.bof eens weg, doet ie het dan wel?? Anders doet die hele loop toch niks, omdat ie bij het begin al bij bof is?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
.bof deed het um..

sorry dudes, automatisme om er .eof en .bof neer te douwen...

Thanks!!!

Heart..pumps blood.Has nothing to do with emotion! Bored


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Op dinsdag 02 juli 2002 12:05 schreef TeeDee het volgende:
.bof deed het um..

sorry dudes, automatisme om er .eof en .bof neer te douwen...

Thanks!!!
Hehe dacht ik al ;)

Suc6 verder

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:54
thanks...

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1