Toon posts:

[mysql] Dichtsbijzijnde datum uit een database selecteren

Pagina: 1
Acties:
  • 132 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hey, ik heb een database met feesten die ook al gepland staan voor in de toekomst. Hoe kan ik nu de datum selecteren (date field) die het dichtsbijzijnde is... (bij de huidige datum) Zonder een interval of scan bereik mee te geven.

[ Voor 6% gewijzigd door Verwijderd op 15-04-2005 16:12 ]


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
SELECT * FROM parties WHERE datum<=NOW() LIMIT 0,1
zoiets?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SELECT * FROM parties WHERE datum>=NOW() LIMIT 0,1

Lijkt me beter werken :Y) Anders kom je altijd te laat op feestjes :P

Overigens zou ik er een order by datum op gooien om de eerstvolgende te krijgen en niet 'zo maar 1 uit de toekomst'.

[ Voor 70% gewijzigd door RobIII op 15-04-2005 16:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Rac-On
  • Registratie: November 2003
  • Niet online
ik zou een datediff doen tussen nu en datum in db. Vervolgens sorteren op datediff en dan de eerste pakken?

doet niet aan icons, usertitels of signatures


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 09-12 22:35
is zoiets niet mogelijk?
code:
1
2
3
4
5
6
SELECT 
    MIN( DATEDIFF(day, partyDate, GETDATE()) )
FROM
    Parties
WHERE
    DATEDIFF(day, partyDate, GETDATE() ) >= 0


is volgens het record die het qua aantal dagen het dichts bij vandaan ligt, moet je alleen ff datum ophalen en iets met group by doen denk.

(weet niet of datediff werkt in mysql)

[ Voor 36% gewijzigd door stp_4 op 15-04-2005 16:30 ]

stp - PSN ID: stp_4


Verwijderd

Topicstarter
Bedankt mensen, het was best een heel simpele oplossing:

code:
1
$query = "SELECT * FROM party a INNER JOIN category b ON a.partyCategory = b.categoryId WHERE partyDate >= '".date("Y-m-d")."' ORDER BY partyCategory,partyDate ASC";


Er zijn verschillende soorten feesten en daarvan moeten op de homepage de eerstvolgende feesten verschijnen.. Nu selecteert hij alle feesten die dus na de huidige datum zijn gepland, die rangschikt hij weer naar datum waarvan de 'oudste nieuwe data' eerst.

In mijn PHP loop zeg ik dat er maar één feest van elke categorie geplaatst mag worden en dat is dus automatisch de eerste nieuwste want dat heeft de SQL query aangegeven met de ASC rangschikking.

(uitleg voor mensen die een soortgelijk probleem hebben)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Waarom willen zoveel mensen toch met datediff werken? De manier die Megamind en RobIII noemen is wat gunstiger i.v.m. indexes lijkt me. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-12 21:11

Janoz

Moderator Devschuur®

!litemod

Waarschijnlijk komt het omdat in de vrag nergens expliciet wordt genoemd dat het om de eerstvolgende datum gaat (toekomst). Datediff zul je moeten gebruiken wanneer je de dichtsbijzijnde datum wilt hebben in de toekomst danwel het verleden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Het staat er wel, maar niet in de topictitel:
Hey, ik heb een database met feesten die ook al gepland staan voor in de toekomst

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:01
Janoz schreef op vrijdag 15 april 2005 @ 18:20:
Waarschijnlijk komt het omdat in de vrag nergens expliciet wordt genoemd dat het om de eerstvolgende datum gaat (toekomst). Datediff zul je moeten gebruiken wanneer je de dichtsbijzijnde datum wilt hebben in de toekomst danwel het verleden.
Als de datediff-variant geen index gebruikt en de limit-variant wel, dan kun je met een goed gevulde tabel waarschijnlijk beter twee keer de limit-variant gebruiken om de vorige en volgende datum te vinden (waarvan je dan het minimum neemt), dan een keer de datedif-variant die weliswaar met 1 query klaar is, maar veel duurder is.

  • Onno
  • Registratie: Juni 1999
  • Niet online
Verwijderd schreef op vrijdag 15 april 2005 @ 17:57:
Bedankt mensen, het was best een heel simpele oplossing:

PHP:
1
2
$query = "SELECT * FROM party a INNER JOIN category b ON a.partyCategory = b.categoryId
WHERE partyDate >= '".date("Y-m-d")."' ORDER BY partyCategory,partyDate ASC";
Wat doe je moeilijk met date()? Is dit niet veel logischer?
PHP:
1
2
$query = "SELECT * FROM party a INNER JOIN category b ON a.partyCategory = b.categoryId
WHERE partyDate >= now() ORDER BY partyCategory,partyDate ASC";

of als je ook per se altijd die van vandaag wilt laten zien:
PHP:
1
2
$query = "SELECT * FROM party a INNER JOIN category b ON a.partyCategory = b.categoryId
WHERE partyDate >= cast(now() as date) ORDER BY partyCategory,partyDate ASC";

  • Rac-On
  • Registratie: November 2003
  • Niet online
Janoz schreef op vrijdag 15 april 2005 @ 18:20:
Waarschijnlijk komt het omdat in de vrag nergens expliciet wordt genoemd dat het om de eerstvolgende datum gaat (toekomst). Datediff zul je moeten gebruiken wanneer je de dichtsbijzijnde datum wilt hebben in de toekomst danwel het verleden.
precies, sorteren op tijd & in je where > nu is makkelijk voor de eerstvolgende, maar in de topic titel staat expliciet "Dichtsbijzijnde", en dat is datediff de manier om te gaan...
Je hebt gelijk dat het misschien niet logisch is voor dit geval (omdat het over afspraken gaat) maar de topic start was niet geheel duidelijk en ik ben blij dat mijn outlook ook aangeeft op welke afspraak ik 10 minuten geleden had moeten zijn...

doet niet aan icons, usertitels of signatures

Pagina: 1