webForumDet fria alternativet

till mysql

14 svar · 320 visningar · startad av ampy

ampyMedlem sedan feb. 20011 498 inlägg
#1
strSQL = "Select count(*) as antal, " & _
" year(datum) & '-' & right('0' & month(datum),2) & '-' & right('0' & day(datum),2)  as inLoggad " & _
"from inloggningar " & _ 
"WHERE vad = 'loggain' " & _ 
"AND datediff('d',datum,now()) <= 9 " & _
"group by year(datum) & '-' & right('0' & month(datum),2) & '-' & right('0' & day(datum),2) " & _
"order by 2 desc "

Hur skriver man denna kod till en mysql-databas, denna är anpasad till en access-databas.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Funktionen datediff finns inte i Mysql

datediff('d',datum,now())

borde kunna skrivas som

to_days(now()) - to_days(datum)

För att få ut en del av ett datum kan du använda funktionen extract

extract(year from datum)
extract(month from datum)
extract(day from datum)
LAMPMedlem sedan mars 2002777 inlägg
#3
... WHERE datum < SUBDATE(NOW(),INTERVAL 9 DAY)
ampyMedlem sedan feb. 20011 498 inlägg
#4

OK, koden ser nu ut så här:

strSQL = "Select count(*) as antal, " & _
" extract(year from datum) & '-' & extract(month from datum) & '-' & extract(day from datum) as inLoggad " & _
"from inloggningar " & _ 
"WHERE vad = 'loggain' " & _ 
"AND to_days(now()) - to_days(datum) <= 9 " & _
"group by extract(year from datum) & '-' & extract(month from datum) & '-' & extract(day from datum) " & _
"order by 2 desc "

Set oRs = Connect.Execute (strSQL)

while not oRS.eof
response.write "" & year(oRs("inloggad")) & "-" & right("0" & month(oRs("inloggad")),2) & "-" & right("0" & day(oRs("inloggad")),2) & ": " & oRS("antal") & " inloggningar<br>"
oRS.movenext
wend

Men då skriver den ut ngt helt konstigt, detta skriver den ut:

1899-12-30: 12 inloggningar

Vilket inte stämmer, vad kan vara felet i koden?

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Stämmer antal?

& betyder inte strängkonkatenering i Mysql utan bitwise and.
Du måste använda functionen concat

strSQL = "Select count(*) as antal, " & _
" concat(cast(extract(year from datum) as char(4)) ,'-', " &_
" cast(extract(month from datum) as char(2)) , '-' , " & _
" cast(extract(day from datum) as char(2)) as inLoggad " & _
"from inloggningar " & _ 
"WHERE vad = 'loggain' " & _ 
"AND to_days(now()) - to_days(datum) <= 9 " & _
"group by " & _
" concat(cast(extract(year from datum) as char(4)) ,'-', " &_
" cast(extract(month from datum) as char(2)) , '-' , " & _
" cast(extract(day from datum) as char(2)) " & _
"order by 2 desc "
ampyMedlem sedan feb. 20011 498 inlägg
#6

Då får jag detta fel:

Microsoft OLE DB Provider for ODBC Drivers error '80040e09' 

[TCX][MyODBC]You have an error in your SQL syntax near '(extract(year from datum) as char(4)) ,'-', cast(extract(month from datum) as c' at line 1
LarsGMedlem sedan dec. 200012 464 inlägg
#7

Det saknas )

strSQL = "Select count(*) as antal, " & _
" concat(cast(extract(year from datum) as char(4)) ,'-', " &_
" cast(extract(month from datum) as char(2)) , '-' , " & _
" cast(extract(day from datum) as char(2))) as inLoggad " & _
"from inloggningar " & _ 
"WHERE vad = 'loggain' " & _ 
"AND to_days(now()) - to_days(datum) <= 9 " & _
"group by " & _
" concat(cast(extract(year from datum) as char(4)) ,'-', " &_
" cast(extract(month from datum) as char(2)) , '-' , " & _
" cast(extract(day from datum) as char(2))) " & _
"order by 2 desc "
ampyMedlem sedan feb. 20011 498 inlägg
#8

Får fortfarande samma fel och jag hittar inte felet i koden. Ser inte ut så att det saknas någon ) eller (

LarsGMedlem sedan dec. 200012 464 inlägg
#9

jag läste mysql's manual. SOm vanligt så följer dom inte ANSI sql standard.

Blir det bättre utan cast?

strSQL = "Select count(*) as antal, " & _
" concat(extract(year from datum)  ,'-', " &_
" extract(month from datum)  , '-' , " & _
" extract(day from datum) ) as inLoggad " & _
"from inloggningar " & _ 
"WHERE vad = 'loggain' " & _ 
"AND to_days(now()) - to_days(datum) <= 9 " & _
"group by " & _
" concat(extract(year from datum) ,'-', " &_
" extract(month from datum) , '-' , " & _
" extract(day from datum) ) " & _
"order by 2 desc "
ampyMedlem sedan feb. 20011 498 inlägg
#10

Nu fungerar det bra :e

Vart läste du mysql's manual?

LarsGMedlem sedan dec. 200012 464 inlägg
#11

https://www.mysql.com

documentation

ampyMedlem sedan feb. 20011 498 inlägg
#12

En annan fråga som vi lika gärna kan ta i denna tråd.

Varför skriver denna kod inte ut någonting, jag får inte felmeddelande heller:

SQL = "Select id from members where bild = 'bild_yes'"

Randomize
Set RS = Connect.Execute(SQL)
if  not rs.eof then
    bilder = rs.getrows()
    antalBilder = ubound(bilder,2) + 1
    For i = 0 to 4
          if i = antalBilder then exit for
        post = Int(RND*(antalBilder - i))
	Response.write "<a href='krypin.asp?id="&bilder(0,post)&"'><img src='krypinbild/bild"&bilder(0,post)&".jpg' border='0' width='80' height='105'></a> "
                bilder(0,post) = bilder(0,antalbilder-i-1)

Next
end if
Rs.Close
Set Rs = Nothing
LarsGMedlem sedan dec. 200012 464 inlägg
#13

Du får lägga in testutskrifter så att du ser vad som händer.

dim debug
debug = true
SQL = "Select id from members where bild = 'bild_yes'"

Randomize
Set RS = Connect.Execute(SQL)
if  not rs.eof then
    if  debug then  response.write "Data found <br>"
    bilder = rs.getrows()
    antalBilder = ubound(bilder,2) + 1
    if  debug then response.write "Antal bilder:" & antalBilder & "<br>"
    For i = 0 to 4
          if i = antalBilder then exit for
        post = Int(RND*(antalBilder - i))
                if  debug then response.write "Post:" & post & "<br>"
	Response.write "<a href='krypin.asp?id="&bilder(0,post)&"'><img src='krypinbild/bild"&bilder(0,post)&".jpg' border='0' width='80' height='105'></a> "
                bilder(0,post) = bilder(0,antalbilder-i-1)

Next
end if
Rs.Close
Set Rs = Nothing

Sen, när det fungerar, så är det bara att ändra till

debug = false
ampyMedlem sedan feb. 20011 498 inlägg
#14

Nu skriver den inte ut någonting heller.

LarsGMedlem sedan dec. 200012 464 inlägg
#15

Då finns det inga poster där villkoret

bild='bild_yes'

är uppfyllt. Kan du köra något interaktivt verktyg (Mysql front kanske) och se vad som finns i tabellen.

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