webForumDet fria alternativet

Göra om till annan kod

Databaser & SQL

17 svar · 513 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Vill ha hjälp att ändra denna kod så den blir bättre och funkar som den ska. Gärna exempel för MySQL databas och Access databas.

DT = Now()
Set RS = Conn.Execute("Select U.status,A.active_check,U.userid From com_users U, com_active A Where A.userID=U.userId")
  Do Until RS.EOF
    If RS(0) = 1 And DateDiff("n", RS(1), DT) > 45 Then
      Conn.Execute("Update com_users Set status=0 Where userid=" & FixaTecken(RS(2)))
      Conn.Execute("Update com_active Set status_var='Ej inloggad' Where userid=" & FixaTecken(RS(2)))
    End If
  RS.MoveNext
  Loop
RS.Close:Set RS=Nothing
Medlem sedan juni 20034 013 inlägg
#2

SELECT status, active_check, com_users.userid FROM com_users LEFT JOIN com_active USING (userID)

skulle jag nog tro att du menar i Mysql.

Medlem sedan dec. 20011 860 inlägg
#3

Men Checken i loopen verkar strula lite. Har jag skrivit fel kanske? Där den kollar tiden.. Med DateDiff..

Medlem sedan juni 200032 967 inlägg
#4

Asa skrev:

Men Checken i loopen verkar strula lite. Har jag skrivit fel kanske? Där den kollar tiden.. Med DateDiff..

Ja, kanske har du skrivit fel. Skriv ut värdena och testa. Glöm inte att subtypskonvertera heller. Strängen "1" är ju inte samma sak som siffran 1 till exempel.

Medlem sedan dec. 200012 464 inlägg
#5
   Update com_users 
    Set status=0 
    Where userid in (
        select userID 
          from com_active
           where datediff('n',active_check,now()) > 45)
     and status = 1

   Update com_active 
    Set status_var = 'Ej inloggad' 
    where datediff('n',active_check,now()) > 45
      and userid in (
          select userid
            from com_users 
           where status = 1)

Gör update direkt och sluta fjanta runt med recordset.

Jag förstår inte din datamodell såtillvida vilken nytta du har av tabellen com_active. Varför räcker det inte med com_users?

Medlem sedan dec. 20011 860 inlägg
#6

I com_active kollas tiden då man senast var aktiv samt var man är på sidan. Nån sa att jag skulle dela så dessa värden låg i en egen tabell.

Medlem sedan dec. 20011 860 inlägg
#7

Koden funkar ej. BLir felmess.

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

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select userID from com_active where datediff('n',active_check,n

/applikationer/community/com_large/login.asp, line 16

Medlem sedan dec. 20003 887 inlägg
#8

bortredigerat

http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html

red.
Redigerade bort en osanning.

Medlem sedan dec. 200012 464 inlägg
#9

Jo, now() finns i Mysql. curdate() returnerar enbart datum och inte tid ...

Det är datediff som har olika syntax och semantik i Mysql och Access. Den kod som jag skrev var ämnad för Access. I Mysql så får man använda

date_add(active_check,interval 45 minute) < now()
Medlem sedan dec. 20011 860 inlägg
#10

Ahh, okej! Tackar

Medlem sedan dec. 20011 860 inlägg
#11

Blir följande fel i denna kod.

Conn.Execute("Update com_users Set status=0 Where userid in (select userID from com_active where date_add(active_check,interval 45 minute) < now()) and status = 1")
Conn.Execute("Update com_active Set status_var = 'Ej inloggad' where date_add(active_check,interval 45 minute) < now() and userid in (select userid from com_users where status = 1)")

Felmess:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select userID from com_active where date_add(active_check,inter

/applikationer/community/com_large/login.asp, line 7

Rad 7 är den övre raden av de två...

Är det onödigt att ha tiden samt aktiviteten i en egen tabell som jag har? Nån sa till mig att det var bra att ha så...

Medlem sedan juni 200032 967 inlägg
#12

Vilken version av MySQL använder du?

Medlem sedan dec. 20011 860 inlägg
#13

4.0.17-nt står det i MySQL Front Sen skall jag använda det på en som har version 4.0.20a-nt

Medlem sedan juni 200032 967 inlägg
#14

Ok. Då är det det det (!) beror på.

Subqueries stöds från version 4.1 och uppåt.

Medlem sedan dec. 20011 860 inlägg
#15

Hmm, hur skall det stå då?

Medlem sedan dec. 20011 860 inlägg
#16

Fick denna kodsnutt av en kille som verkade fungera. Nån som har nån kommentar till det?!

UPDATE com_users, com_active SET 
com_users.status=0, com_active.status_var='Ej inloggad'
WHERE com_users.status=1 AND com_active.userid=com_users.userid 
AND com_active.active_check <= (now() - interval 45 minute)
Medlem sedan dec. 20011 860 inlägg
#17

Den koden verkar ändå inte fungera som den ska. Har testat dölja kodsnutten så det är den som strular och gör så man loggas ut fast man är aktiv. Nån som ser varför i min kodsnutt? Använder MySQL databas.

status är tinyint, status_var är varchar, userid är int och active_check är datetime.

Medlem sedan dec. 20011 860 inlägg
#18

Tar tillbaka det. Verkar fungera iallafall.

267 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)