Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 19:07 Der er 36 kommentarer og
1 løsning

Tæl poster

Hej
Jeg skriver en række kategorier ud i et while loop. Så vil jeg gerne have at vide hvor mange annoncer der er i den enkelte kategori:
-------------------
Set rs = Server.CreateObject("ADODB.recordset")
strSQL = "Select * From kategori order by kategoriNavn ASC"
Set rs = Conn.Execute(strSQL)
while not rs.EOF

Response.Write("kategori ["& ANTAL POSTER &"]")

rs.MoveNext
wend               
rs.Close
Set rs = Nothing

Conn.Close
set Conn = Nothing
-------------------------
Denne forespørgsel henter alle annoncer i kategorien ud:
------------------------
SELECT annonce.annonceId, annonce.annonceKategoriId, kategori.kategoriId, kategori.kategoriNavn FROM kategori INNER JOIN annonce ON kategori.kategoriId = annonce.annonceKategoriId where annonce.annonceKategoriId ="& idnummer &";
------------------------
Men hvordan får jeg den ind i mit while loop, så den kun retunerer antallet af poster?

Jeg er bange for at hvis jeg åbener SQL inde i loopet at det bliver alt for langsomt. Nogæe ideer?
Avatar billede korup Nybegynder
01. februar 2004 - 19:15 #1
SELECT COUNT(*) FROM kategori INNER JOIN annonce ON kategori.kategoriId = annonce.annonceKategoriId where annonce.annonceKategoriId ="& idnummer &";

/korup
Avatar billede thesurfer Nybegynder
01. februar 2004 - 19:15 #2
Kan man ikke bare bruge rs.recordcount, i stedet for en loop?
Avatar billede eagleeye Praktikant
01. februar 2004 - 19:19 #3
Du kan lave den med Group by så kan du nøjes med et kald til databasen og ikke et kald pr. kategori:

SQL = "SELECT Count(*) as antal, kategori.kategoriNavn FROM kategori INNER JOIN annonce ON kategori.kategoriId = annonce.annonceKategoriId group by kategori.kategoriId, kategori.kategoriNavn order by kategori.kategoriNavn ASC"
Set rs = Conn.Execute(strSQL)
do while not rs.EOF
  Response.Write rs("kategoriNavn") & " antal annoncer " & rs("antal") & "<br>"
  rs.Movenext
loop
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 19:25 #4
Jeg skal jo også have kategorierne skrevet ud:

kategori_1 [ANTAL POSTER]
kategori_2 [ANTAL POSTER]
kategori_3 [ANTAL POSTER]
kategori_4 [ANTAL POSTER]
Avatar billede eagleeye Praktikant
01. februar 2004 - 19:28 #5
Så ret loopet til dette, eller skal det i en tabel?:

do while not rs.EOF
  Response.Write rs("kategoriNavn") & "[" & rs("antal") & "]<br>"
  rs.Movenext
loop
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 19:30 #6
Jeg havde ikke set dit indlæg arbejder med det nu
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 19:32 #7
Den skriver ikke alle kategorierne ud men kun én
Avatar billede eagleeye Praktikant
01. februar 2004 - 19:36 #8
har du annoncer i alle kategorier?
Eller så prøv at skive LEFT JOIN og ikke INNER JOIN
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 19:47 #9
LEFT JOIN virker næsten 100% men den retunerer 1 selvom der ikke er nogle annoncer i kategorien
Avatar billede eagleeye Praktikant
01. februar 2004 - 19:50 #10
Ok, så prøv at rette * i :  Count(*)
til nanvet på id kolonne i annonce: Count(annonce.annonceId)
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 19:54 #11
:)
Det var lige det der skulle til
Mange tak

Smid lige et svar hvis du gerne vil have points
Avatar billede eagleeye Praktikant
01. februar 2004 - 19:55 #12
Ok :) her et svar.
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 20:01 #13
Kan du kort i ord forklare forskellen på INNER JOIN og LEFT JOIN?
Avatar billede eagleeye Praktikant
01. februar 2004 - 20:06 #14
Ja:
INNER JOIN tager kun dem med fra "kategori" og "annonce" hvor join ledet i begge tabeller findes.
LEFT JOIN tager alle med fra "kategori" og alle med fra "annonce" hvor join ledet passer.

Så hvis der ikke er nogle annoncer til en kategori vil kategorien ikke komme med hvis man bruger INNER JOIN, men vil komme med ved LEFT JOIN.

Det var en kort udgave :) er det nok?
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 21:00 #15
super - man skal jo helst lære noget af det her :)
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:03 #16
Hej er du her endnu?
Kan man sætte WHERE betingelser ing i den INNER JOIN sætning du skrev?

SQL = "SELECT Count(*) as antal, kategori.kategoriNavn FROM kategori INNER JOIN annonce ON kategori.kategoriId = annonce.annonceKategoriId group by kategori.kategoriId, kategori.kategoriNavn order by kategori.kategoriNavn ASC"
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:04 #17
og i så fald hvor - jeg har forsøgt med det giver fejl
Avatar billede eagleeye Praktikant
01. februar 2004 - 22:06 #18
Ja det kan man den skal være efter JOIN delen:

SQL = "SELECT Count(*) as antal, kategori.kategoriNavn FROM kategori INNER JOIN annonce ON kategori.kategoriId = annonce.annonceKategoriId group by kategori.kategoriId, kategori.kategoriNavn where kategori.kategoriNavn = 'biler' order by kategori.kategoriNavn ASC"
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:07 #19
Jeg kan ikke gøre det på en kollonne i annonce fx annonceTekst eller?
Avatar billede eagleeye Praktikant
01. februar 2004 - 22:11 #20
Jo det skulle ikke være noget problem

Jeg har faktisk vist det forkert Where skal være før GROUP BY :)

SQL = "SELECT Count(*) as antal, kategori.kategoriNavn FROM kategori INNER JOIN annonce ON kategori.kategoriId = annonce.annonceKategoriId where annonce.kolonne = 'biler' group by kategori.kategoriId, kategori.kategoriNavn order by kategori.kategoriNavn ASC"
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:18 #21
Ja det virkede - tak igen
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:41 #22
Jeg er ked af at forstyre dig igen MEN:
Nu har jeg skrevet denne forespørgsel:

"Select annonce.annonceOverskrift, annonce.annonceTekst FROM annonce INNER JOIN billed ON annonce.annonceId = billed.billedeAnnonceId where annonce.annonceStart <= "& dato &" AND annonce.annonceSlut >= "& dato &" ORDER BY rnd(-(annonce.annonceId)* " & R & ") "

Men jeg kan ikke tilgå kolonnerne i "billed" hvorfor kan jeg ikke det? Altså jeg vil gerne kunne Response.Write rs(billed.KOLONNE)

Vi kan godt finde ud af noget med nogle flere points for de her ekstra spg.
Avatar billede eagleeye Praktikant
01. februar 2004 - 22:43 #23
Hvilken data type er annonceStart og annonceSlut og hvad indeholder variablen dato?
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:46 #24
de er datoformat og dato er dagsdato
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:47 #25
jeg vil gerne have billed.billede og billed.billedeLille med i min SELECT del, men alt hvad jeg prøver fejler
Avatar billede eagleeye Praktikant
01. februar 2004 - 22:49 #26
Ok, Access skal havde ## omkring datoen via SQl og Access vil havde datoen i formaet yyyy-mm-dd eller mm-dd-yyyy. Hvis man bruger DK format dd-mm-yyyy vil den bytte rundt på måned og dagen.

Når du vil hvade dags dato kan du bruge den interne Date() funktion i databasen og så det uden ## sådan her:


"Select annonce.annonceOverskrift, annonce.annonceTekst FROM annonce INNER JOIN billed ON annonce.annonceId = billed.billedeAnnonceId where annonce.annonceStart <= Date() AND annonce.annonceSlut >= Date() ORDER BY rnd(-(annonce.annonceId)* " & R & ") "
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 22:51 #27
Øhh - vi har misforstået hinanden
Det med datoen virker fint det er det med at få kolonnerne fra billed med i SELECT delen
Avatar billede eagleeye Praktikant
01. februar 2004 - 22:58 #28
:)

Så det er en kolonne i tabellen billed som skal med?
Så skal den også JOIN'es på. Hvordan hænger billed tabellen samme med de andre?
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 23:01 #29
annonce hænger sammen med billede på denne måde

annonceId -->> billedeAnnonceId (1 til mange)
saelgerId -->> annonceSaelgerId (1 til mange)

Jeg vil nemlig også gerne have sælger kolonne med :)
Avatar billede eagleeye Praktikant
01. februar 2004 - 23:04 #30
Altså:
annonce.annonceId = billed.billedeAnnonceId
annonce.saelgerId = ??????.annonceSaelgerId
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 23:07 #31
annonce.annonceId = billed.billedeAnnonceId
saelger.saelgerId = annonce.annonceSaelgerId
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 23:08 #32
Vi arbejder med 3 tabeller annonce, billed, saelger
Avatar billede eagleeye Praktikant
01. februar 2004 - 23:15 #33
Det bliver noget som dette uden where lige i øjeblikket:

SELECT annonce.annonceid, billed.billede, saelger.navn
FROM (annonce LEFT JOIN billed ON annonce.annonceid = billed.billedeAnnonceId) LEFT JOIN saelger ON annonce.annonceSaelgerId = saelger.saelgerId;
Avatar billede eagleeye Praktikant
01. februar 2004 - 23:17 #34
Så prøv:

"SELECT annonce.annonceid, billed.billede, saelger.navn FROM (annonce LEFT JOIN billed ON annonce.annonceid = billed.billedeAnnonceId) LEFT JOIN saelger ON annonce.annonceSaelgerId = saelger.saelgerId where annonce.annonceStart <= "& dato &" AND annonce.annonceSlut >= "& dato &" ORDER BY rnd(-(annonce.annonceId)* " & R & ") "
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 23:21 #35
YES!
Vil du gerne have nogle flere points?
Avatar billede eagleeye Praktikant
01. februar 2004 - 23:22 #36
Nej det er helt i orden :)
Avatar billede kimlarsen1978 Nybegynder
01. februar 2004 - 23:22 #37
Takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester