Avatar billede michaelgm Nybegynder
07. november 2008 - 10:46 Der er 6 kommentarer

Tættest tid

Mit bud på at finde den nærmeste tid fra nu var:

MIN(TIMEDIFF(DATE_FORMAT(NOW(),'%H:%i'),DATE_FORMAT(vogndata.TID,'%H:%i'))) AS naermesttid

Men på den måde får jeg det samme som hvis jeg lavede en ny forespørgsel og "DATE_FORMAT(vogndata.TID >= NOW() FROM XXX LIMIT 1"

Men det er ikke den næste tid fra nu jeg vil have fat i men der tid der ligger tættest på nu.

Jeg laver et DATE_FORMAT fordi et døgn er fra 03-03 og ikke 00-00
Så derfor er et dato format fra mysql databasen: eks: 1899-12-30 07:25:00

hvis det er denne dato og under 00 er det imorgen efter 00 er det:
1899-12-31 02:25:00


Det passer rigtig dårlig sammen med en masse tid og dato functioner synes jeg.

Nogen der har nogen forslag?
Avatar billede michaelgm Nybegynder
07. november 2008 - 11:53 #1
Hov kom da lige til at se jeg ikke fik kopieret tiden ordenligt ind:

Lad os sige kl 04: 1899-12-30 04:00:00
Og kl 02: 1899-12-32 02:00:00

Sådan ligger tiderne i databasen. Fordi et døgn er fra kl 03-03.
Avatar billede arne_v Ekspert
07. november 2008 - 23:44 #2
prøv:

SELET *
FROM tabel
ORDER BY ABS(TIME_TO_SEC(TIMEDIFF(felt,NOW()))) ASC
LIMIT 1
Avatar billede arne_v Ekspert
18. januar 2009 - 04:18 #3
kommet videre ?
Avatar billede michaelgm Nybegynder
29. januar 2009 - 11:57 #4
Undskyld jeg først melder tilbage så sent.
Jeg har ikke helt fået det til at virke endnu.

Skal bruge det i mange sammenhænge. Men den mest oplagte vil være feks:

SELECT
DATE_FORMAT(vogndata.TID,'%H:%i') AS TID
FROM
vogndata
WHERE
vogndata.VOGNLOB =  '104' AND
vogndata.PLANPERIODE =  '21'
ORDER BY ABS(TIME_TO_SEC(TIMEDIFF(DATE_FORMAT(vogndata.TID,'%H:%i'),NOW()))) ASC
LIMIT 1

Den giver den tid på vognløbet der ligger tættest på nu.

Men jeg vil få et problem hvis vi siger at vognløbet starter kl 05:02 mandag morgen og køre til tirsdag morgen 02:30 og man laver søgningen kl 03:10 mandag? så vil jeg jo få 02:30 tirsdag morgen som burde være 05:02 mandag?

Jeg prøver lige at sætte dato på så kan det være det bliver lidt nemmere at forstå
Vognløb: 104
Køre fra kl 05:02 - 02:30 alle hverdage. det vil sige det strækker sig fra feks d 26-01-2009 05:02 - 27-01-2009 02:30

Det er vist i TID feltet som 1899-12-30 05:02 når det er om morgenen og 1899-12-31 02:30 om natten.

Så jeg vil ikke ku bruge NOW() og heller ikke DATE_FORMAT(vogndata.TID,'%H:%i') i order.
Avatar billede arne_v Ekspert
31. januar 2009 - 03:14 #5
Jeg forstår slet ikke hvor DATE_FORMAT kommer ind i billedet.

Kan du ikke bare bruge vogndata.TID uden den ?
Avatar billede michaelgm Nybegynder
03. februar 2009 - 17:17 #6
Nej for den giver mig en dato der hedder 1899-12-30 05:02 <- Det er jo en del dage siden det vognløb sku have været kørt så.

Det eneste den for fra vogndata.TID er tiden. datoen er til at finde ud af om det er på den ene eller den anden side af 00.

Da et vognløb kan køre fra tidlig morgen feks. kl 04 fredag til 03 lørdag morgen. Men køre stadig som en fredags vognløb. da der starter et nyt vognløb kl 04 lørdag til 03 søndag.

Så døgnet går ikke fra 00:00-23:59 som det normalt ville. Det går fra 04:00-03:59

hvis jeg bruger samme eks som før fredag/lørdag
1899-12-30 05:02 <- ville det være 05:02 fredag morgen
1899-12-31 03:02 <- ville det være 03:02 lørdag morgen

Måden jeg finder ud af om vognløbet skal køre den ene dato er om det market på ugedagen. Og om vagten der er tilkoblet er besat.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester