Update einer DATETIME spalte mit Berechnung aufgrund Inhalt einer anderen Spalte

pschilling

Erfahrenes Mitglied
Hi zusammen,

Also ich habe eine Spalte in welcher immer! ein Datum steht (Login-Datum) und ein anderes DATETIME-Feld (logout) welches null sein kann. Zum Beispiel wenn der Benutzer sich nicht Ordnungsgemäß abmeldet.

Jetzt würde ich gerne alle Datensätze aktualisieren wo logout null ist und zwar mit dem Wert : login + 15 Minuten.

Muss ich das login-Datum auslesen, die 15 Minuten draufrechnen und dann ein update-Statement absetzen oder gibt es da vielleicht etwas im SQL-Wortschatz wo ich das mit einem Statement erledigen kann?

Schon mal vielen Dank im voraus,
Peter
 
Zuletzt bearbeitet:
Du kannst innerhalb des Update-Befehls mit einer Unterabfrage arbeiten und dann 15 Minuten addieren:
UPDATE Tabelle set logout = ((SELECT Login FROM Tabelle where isnull(logout))+15) usw...
Die 15 Minuten musst Du ggf noch voher zum Datetime-Format anpassen und bei SELCT darauf achten, dass Du die richtige Zeile erwischt. Also die passende Where-Bedingung bauen.
 
Danke Fragenfrager für deine Antwort!

Dat geht ja doch viel einfacher als gedacht :)

update table set logout = login + 900 where isnull(logout)

900 wegen 15 * 60 Sekunden

Vielen Dank für deinen Anstupser ;)
 
Hallo Yaslaw,

aktuell läuft im hintergrund eine mysql-DB aber da ich das gesamte System letztens auf PDO umgestellt habe sollte es mir eigentlich schnuppe sein.

Aber danke für den Hinweis!
Das muss ich auf jeden Fall im Auge behalten falls die DB mal ausgetauscht werden sollte.
 
Das stimmt so nicht ganz. Mit PDO kann man die darunter liegende Datenbank beliebig austauschen!

Man muss lediglich den Connect-String umbasteln..

mysql-connect mit PDO :
$pdo = new PDO('mysql:host=host;dbname=dbname', 'root', '' ,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
postgres-connect mit PDO :
$pdo = new PDO("pgsql:dbname=$dbname;host=$host", $dbuser, $dbpass);

u.s.w... ;)
 
Zuletzt bearbeitet:
Mit PDO kann man die darunter liegende Datenbank beliebig austauschen!
Man muss lediglich den Connect-String umbasteln..
Das wäre mir neu. Die Syntax einer MySQL-DB unterscheidet sich in einigen Teilen von der einer MSSQL unterscheidet sich von Oracle unterscheidet sich von DB2 usw. Alleine die Behandlung von NULL-Werten ist da eine Wissenschaft für sich (ISNULL, NULLIF,NVL2, IFNULL,...). Du müsstest also auch alle Statements prüfen.
Aber das gehört hier nicht hin :)
 
Jo, klar muss ich dann alle Statements prüfen ob die dann auf der jeweiligen DB laufen :)

Aber die reine PDO-Syntax bleibt stets dieselbe..

$query = $pdo->prepare()
$qyery->execute
$query->fetch()

...

So wie ich die DATETIME-Queries überprüfen muss muss ich dann auch alle create table, alter table und wie du schriebst auch die behandlung von null-werten und so weiter prüfen, aber immer noch sehr viel effektiver als die Portierung von der mysql-Schnittstelle auf eine andere ..
 
Zurück