Toon posts:

[php]Headlines per dag op frontpage

Pagina: 1
Acties:

Verwijderd

Topicstarter
Korte vraag:
Ik wil headlines uit de db alleen van de laatste 3 dagen gesorteerd per dag genereren zoals de fp van tweakers.net.
Hoe kan ik dit optimaal en netjes doen?
Het lukt me wel met allerlei if-jes en een vage query zoals deze:

SELECT DATE_FORMAT(nieuws.datum,'%k:%i') as nwDatum, nieuws.id, nieuws.kopje, categorie.plaatje FROM nieuws, categorie WHERE nieuws.catid = categorie.catid AND nieuws.datum LIKE '$vandaag%' OR ORDER BY datum DESC LIMIT $vanaf, $tot

maar dat is dus niet echt netjes...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Een LIKE bij een datum :?

Je kan toch wel de datum extracten/whatever en daarop een nette datum-vergelijking doen ?

Zo te zien is het mysql?
Dan is het erg makkelijk, reken het terug naar het aantal dagen. Rond dat evt af en reken dat weer terug naar de datum op die datum kan je prima vergelijkingen doen en/of sorteren.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20:58

Janoz

Moderator Devschuur®

!litemod

Datum type is er niet voor niks. Daar hebben ze gelijk ook een heleboel functies bijgemaakt. Kij in de handleiding eens naar bv BETWEEN. Als je vervolgens de datum (dus niet de tijd) ook als los veld eruit trekt kun je in je while loop kijken of deze veranderd, en dan je 'dag scheiding' printen.

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


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 20:12
Toch is met Unix Timestamps werken hier wel heel makkelijk, in combinatie met php :).

$query = "...WHERE tijd > ".(time() - 86400);

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 06 mei 2002 10:15 schreef C-quence het volgende: nieuws.datum LIKE '$vandaag%' OR ORDER BY datum DESC LIMIT $vanaf, $tot
.
Ik neem aan dat er wat mist in je query? :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20:58

Janoz

Moderator Devschuur®

!litemod

Op maandag 06 mei 2002 10:21 schreef ddc het volgende:
Toch is met Unix Timestamps werken hier wel heel makkelijk, in combinatie met php :).

$query = "...WHERE tijd > ".(time() - 86400);
timestamps zijn niet heilig. Niet elke dag duurt 24 uur ;)

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


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 20:12
ACM:
Ik neem aan dat er wat mist in je query? :)
Dat is nieuw. Als het dan niet hetzelfde is, DAN moet ie sorteren :+. Dus alleen dan.
Janoz :
timestamps zijn niet heilig. Niet elke dag duurt 24 uur ;)
En misschien wilt hij wel gewoon de laatste 72 uur :P

Verwijderd

Topicstarter
Op maandag 06 mei 2002 10:15 schreef C-quence het volgende: nieuws.datum LIKE '$vandaag%' OR ORDER BY datum DESC LIMIT $vanaf, $tot
.
Ik neem aan dat er wat mist in je query? :)

zekers :D.
Wow, kwist niet dat er 4 reacties in 1 minuut tijd mogelijk waren haha.
Maar idd, die LIKE hoort er niet in, moet BETWEEN zijn. Het gaat me meer om het sorteren daarna, dat kan niet anders dan met if-jes in php, toch?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 06 mei 2002 10:26 schreef C-quence het volgende:
Het gaat me meer om het sorteren daarna, dat kan niet anders dan met if-jes in php, toch?
als je zoiets als resultaat bedoelt:
[dag 1...]
nieuws1
nieuws2
nieuws3
[dag 2...]
nieuws4
nieuws5
..

ja, dat kan alleen met php.
Tenminste, het is vast wel mogelijk zoiets uit een database te krijgen, maar of dat zonder stored procedures lukt... ;)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20:58

Janoz

Moderator Devschuur®

!litemod

1 Dat sorteren kun je gewoon in je query doen. Mat een ifje kun je eventueel later kijken waneer je van dag veranderd.
voorbeeld:
code:
1
2
3
4
5
6
7
8
vorigedag=nietbestaandiets;
while (fetch record) {
  if recorddag!=vorigedag {
    print dagscheiding;
    vorigedag=recorddag;
  }
  print rest record
}

Doordat je je nieuwsberichten sorteert op tijd zal dit altijd goed gaan. Mischien wordt het wat lelijk als er niet elke dag berichten zijn, maar dat is eventueel ook nog wel af te vangen.

2 Waarom heb je er ook nog een limit bij? Je hebt de begrenzing toch al mbv de tijd?

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


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 20:12
ACM:
als je zoiets als resultaat bedoelt:
[..]
ja, dat kan alleen met php.
Tenminste, het is vast wel mogelijk zoiets uit een database te krijgen, maar of dat zonder stored procedures lukt... ;)
Een manier om dat op te lossen is een veld mee te sturen met de dag dus.

Vervolgens als je met een while door de resultaten loopt kijk je wanneer het verandert en dan schrijf je een nieuwe dag uit. Ik heb ooit iets vergelijkbaars geschreven :).

[edit]
En Janoz is mij voor met tevens een praktijkvoorbeeld :'(

Verwijderd

Topicstarter
Op maandag 06 mei 2002 10:31 schreef Janoz het volgende:
1.
2. Waarom heb je er ook nog een limit bij? Je hebt de begrenzing toch al mbv de tijd?
1. Oke, bedankt. Dan op die manier ;)
2. Ja, die stond er nog bij voor een andere reden, maar is niet meer nodig.
Pagina: 1