Annäherungswert aus Datenbank holen

d-braun

Erfahrenes Mitglied
Hi,

diese Frage hätte ich genau so gut im Datenbank-Forum stellen können. Da ich aber davon ausgehe dass mein Problem mit einer reinen Datenbankabfrage nicht gelöst werden kann hab ich es hier rein.

Angenommen ich habe folgende Datenbank:
Code:
+-----------------------------------------+
| ID	| Tag	| Monat	| Jahr	| Uhrzeit |
+-----------------------------------------+
| 1	| 15	| 8	| 2010	| 14:00   |
| 2	| 22	| 8	| 2010	| 16:00   |
| 3	| 29	| 8	| 2010	| 14:00   |
| 4	| 5	| 9	| 2010	| 16:00   |
+-----------------------------------------+


Wie bekomme ich nun die ID welche am nächsten zum aktuellen Datum ist?

Spontane Idee von mir war dass ich mir aus den Werten der Datenbank enn Timestamp generiere und diesen mit dem aktuellen vergleiche (z.B. Datenbank-Timestamp - aktueller Timestamp ... Ergebnisse alle positivieren ... Ergebnisse vergleichen und die ID mit der geringsten Differenz nehmen)

Das ist halt keine sonderlich elegante Lösung. Ideen wie ich das sonst machen könnte?
 
So ums in die Runde zu werfen:
Warum speicherst du das Zeugs in der Tabelle nicht mit
ID | Timestamp

Dann könntest du das ja auch recht leicht direkt aus der Datenbank auslesen.
 
Weil ich eine existierende Datenbank die vor einiger Zeit konzipiert wurde nicht einfach so ändern kann ohne das komplette überarbeiten zu müssen.
Die Werte auslesen und darauß nen Timestamp machen ist ja nicht das Problem.

Das Problem ist dass dann recht viele Einträge verglichen werden müssen und diese Lösung generell nicht sonderlich elegant ist.
 
Moin,

Spontane Idee von mir war dass ich mir aus den Werten der Datenbank enn Timestamp generiere und diesen mit dem aktuellen vergleiche (z.B. Datenbank-Timestamp - aktueller Timestamp ... Ergebnisse alle positivieren ... Ergebnisse vergleichen und die ID mit der geringsten Differenz nehmen)

Das ist halt keine sonderlich elegante Lösung. Ideen wie ich das sonst machen könnte?

Ich wüsste keine elegantere, ich sehe da auch nichts unelegantes dran :)

Ergebnisse vergleichen musst du da auch nicht gross, sortiere einfach aufsteigend nach dem Ergebnis der Berechnung, der 1. Datensatz sollte dir das Objekt deiner Begierde liefern.
Für die Berechnung selbst bietet sich übrigens TIMEDIFF() an ;)
 
Hi

Dein Problem lässt sich rein in der Datenbank lösen:

SQL:
SELECT ID from deineTabelle WHERE

ABS(
  UNIX_TIMESTAMP(
    STR_TO_DATE(
      CONCAT(Jahr, '-', Monat, '-', Tag, ' ', Uhrzeit),
      '%Y-%m-%e %H:%i:%s'
    )
  )
  -
  UNIX_TIMESTAMP(CURRENT_TIMESTAMP())
)

<=

ALL (
  SELECT
    ABS(
      UNIX_TIMESTAMP(
        STR_TO_DATE(
          CONCAT(Jahr, '-', Monat, '-', Tag, ' ', Uhrzeit),
          '%Y-%m-%e %H:%i:%s'
        )
      )
      -
      UNIX_TIMESTAMP(CURRENT_TIMESTAMP())
    )
  FROM deineTabelle
)
 
Zuletzt bearbeitet von einem Moderator:
Zurück