01. februar 2004 - 19:07Der 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?
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
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.
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"
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"
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"
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.
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 & ") "
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;
"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 & ") "
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.