Announcement

Collapse
No announcement yet.

Delete nach Datum

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delete nach Datum

    Hallo zusammen,

    in einer Tabelle (ac_alle_temp) wird eine Sitzung eines Users, zu einer bestimmten ID einer anderen Tabelle, gespeichert! So soll verhindert werden , dass die ID durch zwei oder mehr User gleichzeitig bearbeitet werden kann.
    Für die Dauer der Bearbeitung bleibt der Eintrag in der Tabelle bestehen, bei Fertigstellung wird er gelöscht. Funktioniert auch soweit ganz gut. Doch sollte der User den Browser, vor Fertigstellung, schliessen wird der Eintrag nicht gelöst und steht als Leiche in meiner Tabelle und ein weiteres Bearbeiten dieser ID ist dann nicht mehr möglich.

    Die Tabelle (ac_alle_temp) wird mittels eines Ajax Request überwacht. Meine IDEE ist es,

    1. alle Einträge die ein bestimmtes Zeitlimit (20min) überschreiten zu löschen.
    2. sollte eine Leiche bestehen und der gleiche PC einen neuen Eintrag schreiben, soll der ältere Datensatz glöscht werden.

    und alles, wenn möglich, in einer Abfrage

    ich habe folgendes getestet:
    PHP Code:
    SELECT `sitzungID`, `pcID`, `raumID`, `arbeitbeginnFROM `ac_alle_tempWHERE min(`arbeitbeginn`) 
    und dies bekommen
    PHP Code:
    #1111 - Invalid use of group function 
    habe keinen Ansatz das Problem zu lösen.

    Hat jemand eine Idee?

    Gruß
    Arno

    PS.:
    Code:
     # 
    	1 	sitzungID 	int(11) 			
    	2 	pcID 	int(11) 			
    	3 	raumID 	int(11) 		
    	4 	arbeitbeginn 	timestamp 			 	CURRENT_TIMESTAMP

  • #2
    Hallo,
    Originally posted by A.DA View Post
    1. alle Einträge die ein bestimmtes Zeitlimit (20min) überschreiten zu löschen.
    2. sollte eine Leiche bestehen und der gleiche PC einen neuen Eintrag schreiben, soll der ältere Datensatz glöscht werden.

    und alles, wenn möglich, in einer Abfrage
    Das wird nicht gehen, Insert- und Delete-Statements lassen sich nicht kombinieren.
    Bei umgekehrter Reihenfolge könnte man
    1. Mit einem INSERT ... ON DUPLICATE KEY UPDATE den aktuellen Lock-Eintrag vornehmen, bzw. bei bestehender "Leiche" dessen Timestamp aktualisieren.
    2. Mit einem Delete-Statement die "Leichen" löschen.

    Gruß Falk

    Anmerkung: Für die Einschränckung der Ergebnismenge auf Grundlage von aggregierten Werten gibt es die HAVING-Klausel
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Mhhh...

      Ok, dann muss ich die Tabelle überarbeiten. Der Key steht zurzeit auf RaumID. Werde es mal Testen.

      Danke, werde mich sicher nochmal melden

      Comment


      • #4
        Code:
        DELETE  FROM ac_alle_temp WHERE `arbeitbeginn` < now()
        Löscht alle Datensätze kleiner Jetzt. Ich möchte aber alle aäter 20 min haben. Geht das mit CURRENT_TIMESTAMP (2012-11-21 11:15:10) überhaupt?


        Code:
        Habs: DELETE FROM `ac_alle_temp` WHERE `arbeitbeginn`< SUBTIME(now(),'00:20:00')
        Zuletzt editiert von A.DA; 21.11.2012, 12:29.

        Comment

        Working...
        X