• 27.04.2024, 13:17
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

MYSQL - Differenz aus %Deadline% und Now() berechnen.

Samstag, 31. Oktober 2009, 01:27

Moin allerseits - häng gerade vor nem echt ätzendem (trivialen?) problem.

ich habe eine tabelle und muss diese so sortieren, das die kleinste differenz zwischen 2 datumsangaben oben steht.
trigger schon versucht, kriegs aber ums verrecken nicht hin, häng jetzt knapp 2 stunden hinter der mysql-doku :(

hilfe!

Samstag, 31. Oktober 2009, 12:59

Mal geraten und ungetestet:

Quellcode

1
2
3
SELECT feld, nochnfeld, TIMEDIFF(datum1, datum2) AS diff
FROM netabelle
ORDER BY diff;


So hat's eine zusätzliche Spalte im Ergebnis, sollte aber das kleinste Problem darstellen. Evtl. kannst du den SELECT-Ausdruck für die Spalte auch als Argument zu "ORDER BY" übergeben, aber da bin ich nicht sicher, ob das so funktioniert:

Quellcode

1
2
3
SELECT feld, nochnfeld
FROM netabelle
ORDER BY TIMEDIFF(datum1, datum2);

Samstag, 31. Oktober 2009, 17:55

danke yogi, hat geklappt! :) auch das untere beispiel funzte mit aktuellem(naja, debian halt^^) mysqlserver.

//edit: doch nicht - das klappt nur tagesweise.

SELECT Name,Deadline, Start, (Deadline+0) - (NOW()+0) AS diff
FROM Flugtafel
ORDER BY diff;

scheint das richtige ergebnis auszuwerfen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »miami flashback« (31. Oktober 2009, 21:20)

Sonntag, 1. November 2009, 10:17

Ups, stimmt, das hatte ich nicht berücksichtigt. `DATEDIFF()` würde dagegen nur die Tage ohne Uhrzeit heran ziehen. Ein `DATETIMEDIFF()` gibt es offenbar nicht.

Das lässt sich dennoch nutzen, denke ich:

Quellcode

1
ORDER BY DATEDIFF(Deadline, Start), TIMEDIFF(Deadline, Start);


Kompakter und ohne redundante Feldnennung dürfte dieses sein:

Quellcode

1
ORDER BY TIMESTAMPDIFF(SECOND, Deadline, Start);

Je nach Genauigkeitsbedarf auch `FRAC_SECOND` statt `SECOND`.

Eine Idee wäre sonst noch, die beiden Felder als Timestamps zu behandeln, dann könnte man sie einfach subtrahieren. Eine passende Umwandlungsfunktion habe ich aber noch nicht gefunden und die Felder selbst sind vermutlich keine `TIMESTAMP`s, sondern `DATETIME`s.

In deinem Beispiel beziehst du allerdings nur das Feld `Deadline` mit ein, `Start` aber nicht?

Montag, 2. November 2009, 13:19

der name 'start' war leider etwas unglücklich ausgedrückt - die ursprüngliche sql-syntax war wesentlich länger, habe sie einfach sehr gekürzt, ums lesbarer zu machen.
im augenblick ist noch meine order-by-klausel aktiv, wenn ich das nächste mal dran sitze, werde ich mal deine version mit date/timediff testen :)

Ähnliche Themen