MySQL: Timestamp-Problem (schwer zu erklären)

VBFreak

Mitglied
Hallo,

Ich habe eine Tabelle mit einem MySQL-Timestamp-Feld.

Hier ein paar Beispiel-Datensätze (sind wüst durcheinander gespeichert, für euch mal aufsteigend sortiert)

20050330000000
20050330000001
20050330000002
20050330000004
20050330000005
20050330000006
20050330000106

Ich hätte jetzt gern die Summe aller Sekunden, bei denen die Zeit-Differenz zum nächsten Datensatz größer als 1 Sekunde ist, also hier die Datensätze mit 20050330000002, 20050330000004 und 20050330000006, 20050330000106. Die Summe wäre in dem Beispiel also 2 + 1 * 60 = 62 Sekunden.

Soweit verstanden? Gut.

Meine Frage:
Wie kriege ich das in ein SQL-Statement oder in möglichst schnell arbeitendes PHP? Das Problem ist nämlich, dass damit ca 50000+ Datensätze in möglichst kurzer Zeit analysiert werden müssen.
 
Zuletzt bearbeitet:
Hallo VBFreak,

2 + 1 * 60 = 61 Sekunden?

Dem muß ich widersprechen! Nach meiner Rechnung ist

2 + 1 * 60 = 62 Sekunden! :-)

Oder Du willst tatsächlich nur die Summe der den Wert von einer Sekunde überschreitenden Differenzen, jedoch ohne die eine Sekunde. Dann

1 + 59 = 60 Sekunden! Das zu definieren ist wichtig (s.u.)

Mit PHP wirst Du bei größeren Datenmengen früher oder später an die Grenzen der Laufzeitbegrenzung stoßen. Warum benutzt Du nicht PERL?

Ob mit PERL oder PHP, mein Lösungsansatz würde dahingehend lauten, ALLES vom MySQL-Server erledigen zu lassen. Ich habe mit Temporären Tabellen gute Erfahrungen gemacht, die arbeiten schnell und zuverlässig.

1. - CREATE TEMPORARY TABLE copyxyz SELECT * FROM originalxyz GROUP BY timestamp_spalte
// Durch GROUP werden schonmal identische timestamps gefiltert
// außerdem müßte eine zusätzliche Spalte mit aufsteigenden ID's eingefügt werden, aber keine Ahnung, wie das geht
2. - CREATE TEMPORARY TABLE copyxyz2 SELECT * FROM copyxyz

3. - CREATE TEMPORARY TABLE differenzen SELECT (copyxyz.timestamp-copyxyz2.timestamp) AS differenz FROM copyxyz, copyxyz2 WHERE (copyxyz.ID-copyxyz2.ID)=1 AND (copyxyz.timestamp-copyxyz2.timestamp)>1
// Bedingung ist, daß nur Differenzen zum nächsten Datensatz und nur bei solchen berücksichtigt werden, wo die Differenz größer als 1 ist
// Sollte Deine Definition (s.o.) besagen, daß Du die Differenz abzüglich der einen Sekunde erhalten möchtest, dann muß es natürlich heißen ... SELECT (copyxyz.timestamp-copyxyz2.timestamp-1) AS ...

4. SELECT SUM(differenz) FROM differenzen

Soweit meine Ideen. Kannst ja mal die fertige Lösung posten.
Gruß
 
Zuletzt bearbeitet:
Hi,

Jo, hast recht 2 + 1 * 60 = 62 (Mathematik lässt sich net besch***en, blöder Tippfehler :D)

Zu deinem Vorschlag PERL zu nutzen:
  1. kann ich nicht :p
  2. darf ich nicht einsetzen (nur PHP) :rolleyes:
Zu deinen temporären Tabellen:
  1. Sowas gibt's? :eek:
  2. Geht nicht, hab keine Create-Rechte mit Account, nen andren Account krieg ich nicht ;-]
Wird mir wohl nix andres übrig bleiben, als das selber in PHP zusammenzuzählen.(Laufzeitgrenze-Problem ist bekannt) :mad:

EDIT: hab Fehler oben behoben
 
Zuletzt bearbeitet:
Nachtrag: Du sollst keine CREATE-Rechte haben? Daß Provider nur eine DB bereitsstellen, davon habe ich gehört, aber nur eine DB mit einer Tabelle Glaube ich nicht.
 
Nee, das ist in einem Intranet und ich soll da nur ein neues Modul entwickeln und hab eben nur so einen Schrott-Account bekommen, der nur abfragen darf. :)
 
Zuletzt bearbeitet:
Zurück