ORDER BY datum in string vorm

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim van Norde

Tim van Norde

08/05/2012 22:18:31
Quote Anchor link
Hallo,

Ik sla data (datums) op als string om bepaalde redenen.

11 november 2012 om 14:30 sla ik zo op:
2012,11,23,14,30
Is er een mogelijkheid om binnen SQL het toch als datum te 'zien' en zo 5 records te pakken, beginnend bij de datum die het dichtst bij vandaag ligt?
 
PHP hulp

PHP hulp

22/11/2024 05:29:06
 

08/05/2012 22:29:51
 
Erwin H

Erwin H

08/05/2012 22:30:16
Quote Anchor link
Tim van Norde op 08/05/2012 22:18:31:
Ik sla data (datums) op als string om bepaalde redenen.

Zonder de redenen te weten denk ik toch zo arrogant te kunnen zijn om te zeggen dat dat dus niet verstandig is. De oplossing van je probleem begint (het makkelijkst) bij dit aan te passen en het wel gewoon als datum op te slaan.
 
- SanThe -

- SanThe -

08/05/2012 23:02:52
Quote Anchor link
Erwin H op 08/05/2012 22:30:16:
Tim van Norde op 08/05/2012 22:18:31:
Ik sla data (datums) op als string om bepaalde redenen.

Zonder de redenen te weten denk ik toch zo arrogant te kunnen zijn om te zeggen dat dat dus niet verstandig is. De oplossing van je probleem begint (het makkelijkst) bij dit aan te passen en het wel gewoon als datum op te slaan.


Helemaal mee eens.
 
Tim van Norde

Tim van Norde

08/05/2012 23:24:15
Quote Anchor link
Dan moet ik heel veel dingen aanpassen wat misschien op deze manier niet hoeft. Ik heb CONVERT even bekeken en ben op dit uitgekomen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "SELECT * FROM tvn_agenda ORDER BY CONVERT(start, Date) ASC limit 5";

Maar als ik het goed heb pakt het nu ook data wat in het verleden ligt. Valt dit nog op te lossen of moet ik er echt een Date veld van gaan maken?
 
Frank WD

Frank WD

09/05/2012 00:41:23
Quote Anchor link
Tim van Norde op 08/05/2012 23:24:15:
of moet ik er echt een Date veld van gaan maken?


Of het moet is helemaal aan jou zelf.
Er word alleen aangeraden om hier een date veld van te maken in plaats wat jij wilt.
Je geeft eigenlijk zelf al aan dat je nu veel dingen moet aanpassen. Het lijkt mij dat je dan beter nu even die dingen kunt aanpassen. Want stel?

Je krijgt dit werkend wat je nu wilt. Helemaal leuk en aardig natuurlijk.
Maar nu wil je het misschien dingen later toch anders weer geven of je wilt het geen verder uitbreiden. En je komt weer met deze date's te zitten. Als je dan er achter komt dat je het echt anders moet gaan doen, dan ben ik bang dat je dan een blauwe plek voor je voorhoofd krijgt (De wel bekende klap voor de kop).
Want hoeveel moet je dan aanpassen? En dan heb ik het niet over de al reeds toegevoegde rows in je database die dan bijna op datum onbruikbaar worden.

Daarom sluit ik mij ook aan bij de eerder advies die gegeven is.
Maak er een date veld van en laat Mysql het werk doen zoals het eigenlijk ook hoort.
Je kunt later altijd het gewenste result terug halen en in php weer geven zoals je het wilt hebben.
 
Wouter J

Wouter J

09/05/2012 08:07:03
Quote Anchor link
Je hebt eigenlijk 2 oplossingen:
- Een Date veld gebruiken
- Alle waardes in aparte velden stoppen, dus een year-, month-, day-, hour-, minute- veld.

Wat je nu hebt, meerdere waardes in 1 veld stoppen gescheiden door komma's, is iets wat totaal niet wordt aangeraden. Die 2e optie is natuurlijk veel te omslachtig en dus zul je de 1e 'moeten' gebruiken.

Je hoeft natuurlijk dit formaat niet met de hand aan te passen. Je kan ook een scriptje schrijven die 2012,11,23,14,30 omschrijft naar 2012/11/23 14:30:00.
 
Erwin H

Erwin H

09/05/2012 09:33:59
Quote Anchor link
Het punt is, vanuit een echt DATETIME veld kan je heel eenvoudig de string maken die je nu hebt (via de CONCAT functie en de verschillende YEAR, MONTH etc functies). Maar andersom is bijna niet goed te doen (of is heel erg traag). Dus ja het zal je nu extra ontwikkel tijd kosten, maar dat verdien je later dubbel en dwars terug.

Ik heb in elk geval nog nooit een echt goede reden gezien om data in strings op te slaan in plaats van echte DATETIME velden.
 
Kris Peeters

Kris Peeters

09/05/2012 10:26:55
Quote Anchor link
Wouter J op 09/05/2012 08:07:03:
... Je kan ook een scriptje schrijven die 2012,11,23,14,30 omschrijft naar 2012/11/23 14:30:00.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
  $datestring
= '2012,11,23,14,30';
  $date = vsprintf("%04d/%02d/%02d %02d:%02d:00", explode(',', $datestring));  //
  echo $date;
?>
Gewijzigd op 09/05/2012 10:27:44 door Kris Peeters
 
Chris PHP

Chris PHP

09/05/2012 10:42:00
Quote Anchor link
Als je een DATETIME veld aanmaakt, dan verwacht deze toch ook een waarde in het juiste format? Is dit niet de UNIXTIMESTAMP? Dan zou 2012,11,23,14,30 of 2012/11/23 14:30:00 of elke andere (niet officiele format) niet geaccepteerd worden?

Corrigeer me even als ik er langs zit.
 
Wouter J

Wouter J

09/05/2012 11:22:52
Quote Anchor link
Nee, een DATETIME veld verwacht deze syntax:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
YYYY-MM-DD HH:II:SS
YYYY/MM/DD HH:II:SS
YY-MM-DD HH:II:SS
YY/MM/DD HH:II:SS

En de - of / mag volgens mij (weet ik niet zeker) elk teken zijn en mag je ook weglaten: YYYYMMDDHHIISS
 
Chris PHP

Chris PHP

09/05/2012 13:09:05
Quote Anchor link
@Wouter, dat is helder dank je.
 
Tim van Norde

Tim van Norde

09/05/2012 21:49:42
Quote Anchor link
Hartstikke bedankt allemaal voor de tips, maar voor nu houd ik het even op een string. Kan iemand mij tips geven over hoe ik mijn vorig geplaatste stukje code zo aan kan passen dat het werkt?
 
Tim van Norde

Tim van Norde

11/05/2012 00:15:31
Quote Anchor link
Het is me nog steeds niet gelukt, ik wil het voorlopig nog even in string form houden. Zou iemand mij kunnen helpen met mijn vorige vraag? (vorige post)
 
Kris Peeters

Kris Peeters

11/05/2012 09:52:03
Quote Anchor link
Waarom zou je verwachten dat mySQL een string als datum aanziet, terwijl mySQL zelf datum/tijd velden heeft?

Of kan je misschein toch eens die "bepaalde redenen" opnoemen
Gewijzigd op 11/05/2012 09:58:15 door Kris Peeters
 
Erwin H

Erwin H

11/05/2012 10:23:20
Quote Anchor link
Tim van Norde op 11/05/2012 00:15:31:
Het is me nog steeds niet gelukt, ik wil het voorlopig nog even in string form houden. Zou iemand mij kunnen helpen met mijn vorige vraag? (vorige post)

Dan niet. Het spijt me, maar de goede oplossing is gegeven. Als je die niet wil gebruiken dan lijkt het erop dat je te eigenwijs bent om het aan te nemen. Of.... je moet inderdaad de redenen geven waarom niet. Maar als de eerste conclussie geldt dan mag je zelf verder zoeken. Dat is namelijk een stuk lastiger en gaat dus veel meer tijd kosten. Waarom verwacht je dat wij dat voor je gaan doen als de echte oplossing al gegeven is?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.