Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Timediff gebruiken in DELETE query

Pagina: 1
Acties:

Onderwerpen


  • WoBaDijk
  • Registratie: December 2004
  • Laatst online: 08-01 21:20
Ik ben bezig om een class te schrijven die sessies van gebruikers van de website opslaat en beheert. Het hele systeem werkt naar behoren alleen de verlopen sessies worden niet uit de database verwijdert. Gebruikers blijven dus altijd ingelogd als ze eenmaal aangemeld zijn.

Elke gebruiker krijgt een sessie lengte mee waarmee het einde van de sessie berekend wordt. Het is dan de bedoeling om de verlopen sessies weer uit de database te verwijderen. Voor de sessie tijden gebruik ik een datetime, omdat ik mijn database graag netjes en duidelijk wil houden en het feitelijk data zijn.

Ik heb een aantal verschillende manieren geprobeerd waarbij ik het gevoel had het dichtst bij mijn beoogde eindresultaat te komen met de TIMEDIFF functie van MySQL. Als ik deze laat berekenen middels een SELECT query krijg ik keurig het resultaat te zien wat ik wil, alleen in de DELETE query werkt het niet en kan ik hier ook geen oplossing voor vinden.

Omdat code meer zegt dan woorden in dit geval hierbij de delete query:
code:
1
2
DELETE FROM user_sessions
WHERE TIMEDIFF(NOW(), lastupdate) > length


Wie o wie weet hoe deze query kan gaan werken?

Edit: Als ik de query rechtstreeks als SQL in de database invoer werkt deze wel.

[ Voor 3% gewijzigd door WoBaDijk op 22-04-2011 09:27 ]

Apple MacBook Pro 13" 2,53Ghz | 4Gb | GeForce 9400M | 250Gb HDD |


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:48

MueR

Admin Devschuur® & Discord

is niet lief

Even een tik naar Programming

Wat voor data staat er in length dan? Volgens de manual geeft timediff namelijk een string a la "18:00:00" terug.

[ Voor 99% gewijzigd door MueR op 22-04-2011 09:39 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Bovenstaande query kan geen indexes gebruiken.

Waarom sla je de length in de database erbij op, hebben sessies verschillende lengtes?

  • WoBaDijk
  • Registratie: December 2004
  • Laatst online: 08-01 21:20
De sessies hebben inderdaad verschillende lengtes. Gebruikers kunnen kiezen hoelang ze willen dat een sessie duurt.

De query blijkt echter geheel te werken. Ik ben er ondertussen achter dat het probleem zat in de database actie. Ik gebruik hiervoor een PDO object met een aantal uitvoerende functies. Daar stond een variabele fout.

Bedankt voor de reacties!

Apple MacBook Pro 13" 2,53Ghz | 4Gb | GeForce 9400M | 250Gb HDD |


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 20:02
Ik zou de "expire date" van de sessie een eigen kolom geven. Dat vereenvoudigt allerlei queries die je waarschijnlijk wil doen met sessies. Het opschonen van verlopen sessies, het ophalen van alle actieve sessies van een gebruiker, etc.

Regeren is vooruitschuiven


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
WoBaDijk schreef op vrijdag 22 april 2011 @ 08:49:
Het hele systeem werkt naar behoren alleen de verlopen sessies worden niet uit de database verwijdert. Gebruikers blijven dus altijd ingelogd als ze eenmaal aangemeld zijn.
Tussendoorvraagje, maar wat heeft het niet verwijderen van sessies te maken met altijd ingelogd te zijn?
Je gebruiker wordt toch al uitgelogd als laatste_sessie_tijd + sessielengte over de huidige tijd heengaat?

Het opschonen van sessies is netjes en goede housekeeping, maar ik zou er geen betekenis aan hangen...
Pagina: 1