Sql Tabellen vergleichen und bestimmte Zeilen löschen

spikaner

Quereinsteiger @ php
Ich habe 2 Tabellen mit werten die via cronjob einmal täglich gefüttert werden, jetzt will ich Tabelle A mit B vergleichen und alle Zeilen in beiden löschen wo kein Timestamp + - 3 sec übereinstimmt (weil im cronejob "time()" nicht einmal sondern in jeder schleife neu definiert wurde) .
2. Problem, beim Tabellenaufbau ist noch das Timestamps mehrfach vorkommen.
Hat jemand eine Idee wie ich das am einfachsten bewerkstelligen kann/könnte ?

autoincrement etc. gibts natürlich auch net wirklich.
Habe die Daten so übernommen aber würde sie gerne weiter nutzen.

mfg Spikaner
 
1) Alles direkt in einem Query.
SQL:
DELETE 	tbl_a, tbl_b
FROM		tbl_a, tbl_b
WHERE		
	tbl_a.my_time BETWEEN 
		DATE_SUB(tbl_b..my_time, INTERVAL 3 SECOND) 
		AND DATE_ADD(tbl_b..my_time, INTERVAL 3 SECOND)


2) Nicht verstehn.
 
Zuletzt bearbeitet von einem Moderator:
2. erlidigt sich ja dann ansich selbst aber bei der Abfrage bekomme ich
#1064 - 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 '.Time, INTERVAL 3 SECOND) AND DATE_ADD(mineralieanan..Time, INTERVAL 3 ' at line 5
habe es so versucht in phpmyadmin
Code:
DELETE  mineraliean, mineralieanan
FROM        mineraliean, mineralieanan
WHERE       
    mineraliean.Time BETWEEN 
        DATE_SUB(mineralieanan..Time, INTERVAL 3 SECOND) 
        AND DATE_ADD(mineralieanan..Time, INTERVAL 3 SECOND)
phpmyadmin version ist 3.4.11.1

mfg Spikaner

P.S. Time ist leider eine varchar(30) mit Timestamp
 
Zuletzt bearbeitet:
Mein Fehler. Natürlich nur ein Punkt.

Timestamp als VARCHAR(30). Du meinst einen UNIX-Tiemstamp? Oder ein Datumsstring?
Zeig mal ein Beispiel eines deiner Timestamps
 
UNIX-Tiemstamp aber ergebnis nach 1. Lauf nicht ganz zufriedenstelend in der 1. Tabelle sind noch Daten wo in Tabelle 2 nicht mehr da sind , muß ich jetzt das ganze nochmal "Umgedreht" laufen lassen ? sprich
Code:
DELETE  mineralieanan, mineraliean
FROM        mineralieanan, mineraliean
WHERE       
    mineralieanan.Time BETWEEN 
        DATE_SUB(mineraliean.Time, INTERVAL 3 SECOND) 
        AND DATE_ADD(mineraliean.Time, INTERVAL 3 SECOND)
ansonsten sind schon jedemenge datensätze verschwunden

Oder mach ich dann alles kaputt..., iss zwar nen Backup aber naja wieder aufspulen etc etc

mfg Spikaner
 
Fehler gefunden ;) hat wunderbar funktioniert nur in der 1 Tabelle wurden komischerweise die ersten 32 Datensätze nicht gelöscht

thx
 
Wenn du Unixtimestamp hast, solltest du diese noch mit FROM_UNIXTIME() in ein MySQL-Timestamp wandeln.

Das Problem mit Daten die da sind aber nicht mehr da sind kann ich dir nicht helfen, da zu wenig Details ein Beispiel von den Anfangsdaten mit Erklärung welche alle gelöscht werden sollten, wäre nicht schlecht oder?
 
Bin so zufrieden damit, der Ersteller hat damals eine id mit angehängt für jeden cronejob die id´s laufen jetzt ab 20 kontinuirlich durch bis 969 kann mich also net beschwerden das das Problem ansich blos der Anfang war. jetzt noch das ganze mit meiner Tabelle kopelln und gut iss ;)

das mit den id´s hab ich jetzt erst erkannt weil sie anfangs leer waren etc etc..

Danke nochmal für die schnelle Hilfe.

mfg
 
Zuletzt bearbeitet:
Zurück