webForumDet fria alternativet

Hur göra bättre?

11 svar · 261 visningar · startad av nisslass

nisslassMedlem sedan nov. 2001348 inlägg
#1

Hej!

Hur gör jag denna kod smidigare/bättre?

SQL = "select count(*) as antalbokningar3 from Bokningar where Kung='1' AND Kollad='0'"
Set RS = Conn.Execute(SQL)
antalbokningar3 = rs("antalbokningar3")
rs.close

SQL = "select count(*) as antalbokningar4 from Bokningar where Kung='1' AND Kollad='1' AND Bokningsdatum > '" & DateAdd("d",-14,Now) & "'"
Set RS = Conn.Execute(SQL)
antalbokningar4 = rs("antalbokningar4")
rs.close

SQL = "select count(*) as antalbokningar5 from Bokningar where Kung='1' AND Kollad='2'"
Set RS = Conn.Execute(SQL)
antalbokningar5 = rs("antalbokningar5")
rs.close

Sidan forsätter till antalbokningar9... så det är mycket som måste räknas.. kan detta göras i en och samma sqlfråga?

cyprysMedlem sedan dec. 20003 563 inlägg
#2

Vilken DBMS?

Detta skulle dock kunna fungera.

SQL = "SELECT " & _
"(select count(*) from Bokningar where Kung='1' AND Kollad='0') AS AntalBok3, " & _
"(select count(*) from Bokningar where Kung='1' AND Kollad='1' AND Bokningsdatum > '" & DateAdd("d",-14,Now) & "') AS AntalBok4, " & _
"(select count(*) from Bokningar where Kung='1' AND Kollad='2') AS AntalBok5 " & _
" FROM Bokningar "
nisslassMedlem sedan nov. 2001348 inlägg
#3

Oj, sorry... MySQL ;) Det där såg logiskt och fint ut.. ska testa...
Tack..

cyprysMedlem sedan dec. 20003 563 inlägg
#4

då måste du ha mySQL 4.1 då tidigare varianter inte tar subquerys

nisslassMedlem sedan nov. 2001348 inlägg
#5

Verkar som mitt hotell kör 3.23.54-nt... hmm vad händer då?

LarsGMedlem sedan dec. 200012 464 inlägg
#6
select kollad,count(*)
  from bokningar
  where kollad in ('0','2') and kung = '1'
  group by kollad
union
 select '1',count(*)
  from bokningar
  where kollad = '1' and kung = '1'

Flyttas från ASP

Red, eftersom det är Mysql så finns det inte Union heller. Dela upp det i två frågor.

Cyprys:

Din fråga skulle returnera lika många rader som det finns i tabellen.

nisslassMedlem sedan nov. 2001348 inlägg
#7

Nu fattade jag ingenting av ditt svar Lars.. :q

Koden dvs...
Hur hämtar jag det uträknade svaret och siffrorna gör vadå?

LarsGMedlem sedan dec. 200012 464 inlägg
#8

Om du utför en fråga som

set rs = connect.execute ( _
"select kollad,count(*) "
"  from bokningar "
"  where kollad in ('0','2') and kung = '1' "
"  group by kollad "

så kommer du att få en rad med två kolumner för varje olika värde på kollad. Om du vill söka på fler värden än '0' och '2' så är det bara att lägga till dom i in-listan.

Eftersom du har olika where-villkor i dina frågor så måste du dela upp det i åtminstone två anrop. Du beskriver ju inte exakt hur resten av frågorna ser ut så jag kan inte uttala mig mer exakt.

nisslassMedlem sedan nov. 2001348 inlägg
#9

Exakt såhär ser det ut;

SQL = "select count(*) as antalbokningar from Bokningar Where Kollad <> '3'"
Set RS = Conn.Execute(SQL)
antalbokningar = rs("antalbokningar")
rs.close

SQL = "select count(*) as antalbokningar2 from Bokningar where Kung='1' AND Kollad <> '3'"
Set RS = Conn.Execute(SQL)
antalbokningar2 = rs("antalbokningar2")
rs.close

SQL = "select count(*) as antalbokningar3 from Bokningar where Kung='1' AND Kollad='0'"
Set RS = Conn.Execute(SQL)
antalbokningar3 = rs("antalbokningar3")
rs.close

SQL = "select count(*) as antalbokningar4 from Bokningar where Kung='1' AND Kollad='1' AND Bokningsdatum > '" & DateAdd("d",-14,Now) & "'"
Set RS = Conn.Execute(SQL)
antalbokningar4 = rs("antalbokningar4")
rs.close

SQL = "select count(*) as antalbokningar5 from Bokningar where Kung='1' AND Kollad='2'"
Set RS = Conn.Execute(SQL)
antalbokningar5 = rs("antalbokningar5")
rs.close

SQL = "select count(*) as antalbokningar6 from Bokningar where Kollad='3'"
Set RS = Conn.Execute(SQL)
antalbokningar6 = rs("antalbokningar6")
rs.close

SQL = "select count(*) as antalbokningar7 from Bokningar where Kung='1' AND Kollad='1' AND Bokningsdatum < '" & DateAdd("d",-14,Now) & "'"
Set RS = Conn.Execute(SQL)
antalbokningar7 = rs("antalbokningar7")
rs.close

SQL = "select count(*) as antalbokningar8 from Bokningar where Kung='1' AND Kollad='40'"
Set RS = Conn.Execute(SQL)
antalbokningar8 = rs("antalbokningar8")
rs.close

SQL = "select count(*) as antalbokningar9 from Bokningar where Kung='1' AND Kollad='40' AND paminnelseskickad < '" & DateAdd("d",-14,Now) & "'"
Set RS = Conn.Execute(SQL)
antalbokningar9 = rs("antalbokningar9")
rs.close

SQL = "select count(*) as antalbokningar10 from Bokningar where Kung='1' AND Kollad='50'"
Set RS = Conn.Execute(SQL)
antalbokningar10 = rs("antalbokningar10")
rs.close

SQL = "select count(*) as antalbokningar11 from Bokningar where Kung='1' AND sistamin='1' AND Kollad <> '3'"
Set RS = Conn.Execute(SQL)
antalbokningar11 = rs("antalbokningar11")
rs.close
LarsGMedlem sedan dec. 200012 464 inlägg
#10

Du kan slå ihop 4 av frågorna till

set rs = connect.execute ( _
"select kollad,count(*) "
"  from bokningar "
"  where kollad in ('0','2','40','50') and kung = '1' "
"  group by kollad " )

De övriga får du ta var för sig.

ZeTaMedlem sedan aug. 200315 inlägg
#11

Du kan använda : så att det bara blir en rad :P

StevePMedlem sedan mars 2003772 inlägg
#12

Jo men det blir ju mindre överskådligt? Ser bättre ut med delade rader som LarsG gör.

128 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)