[MySQL] Selecteren laatste 3 dagen MET posts

Pagina: 1
Acties:

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 30-07 19:50

PowerSp00n

There is no spoon

Topicstarter
Ik probeer een query wat te verbeteren maar het wil nog niet echt lukken. Het is de bedoeling dat de query de laatste 3 dagen selecteert met als voorwaarde dat er die dag nieuws in de database staat. Het is nu zo dat als er zaterdag, maandag en dinsdag nieuws in de database staat het alleen maandag en dinsdag laat zien omdat er zondag geen nieuws was. Ik heb al verschillende dingen geprobeerd maar ik krijg niet het gewenste resultaat, ik heb wel een heel klein beetje het idee wat er mis gaat maar hoe ik dit hier uit moet leggen en vooral hoe ik dit op moet lossen is nog niet gelukt. Ik heb nu het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
  id,
  FROM_UNIXTIME(time, '%e') AS day,
  time,
  FROM_UNIXTIME(time) AS date
FROM
  news
WHERE
  news=1 AND
  announcement=0
GROUP BY
  day
ORDER BY
  time DESC
LIMIT 3;


Dit geeft als resultaat:
code:
1
2
3
4
5
6
7
+-----+------+-----------+---------------------+
| id  | day  | time      | date                |
+-----+------+-----------+---------------------+
| 113 | 9    | 989422780 | 2001-05-09 17:39:40 |
| 107 | 4    | 988963386 | 2001-05-04 10:03:06 |
|  95 | 14   | 987231365 | 2001-04-14 08:56:05 |
+-----+------+-----------+---------------------+


wat dus veel te oud is. Er zit bijna bij elke dag wel nieuws in de database en het hoogste id zit nu rond de 600. Iemand die me op weg kan helpen? tnx..

  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
GEbruik gewoon je gezonde verstand. Dit soort vragen komen bij GOT steeds vaker voor. Dit is gewoon een kwestie van een goede querie bedenken. Je mag zelf wel een beetje nadenken.

  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 25-08 14:08
Nou ja die GROUP BY day lijkt me wel een beetje fout, omdat je nu je hele resultset groupeert op dagnummer. Beter lijkt me een GROUP BY op date?

zoiets bv:

code:
1
2
3
4
5
SELECT datum
FROM nieuws
GROUP BY datum
ORDER BY datum DESC
LIMIT 0,3

[ Voor 29% gewijzigd door SilentThunder op 13-01-2003 15:16 . Reden: query toegevoegd ]

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • whoami
  • Registratie: December 2000
  • Nu online
Mickman schreef op 13 januari 2003 @ 15:13:
GEbruik gewoon je gezonde verstand. Dit soort vragen komen bij GOT steeds vaker voor. Dit is gewoon een kwestie van een goede querie bedenken. Je mag zelf wel een beetje nadenken.


Als je niets zinnigs te zeggen hebt, zeg dan niks.

https://fgheysels.github.io/


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Mickman:
GEbruik gewoon je gezonde verstand. Dit soort vragen komen bij GOT steeds vaker voor. Dit is gewoon een kwestie van een goede querie bedenken. Je mag zelf wel een beetje nadenken.

Want jij hebt een goede tip voor de topicstarter, begrijp ik? Zo niet, laat dit soort posts dan achterwege, wordt niemand beter van :)

edit:
offtopic:
whoami voorpiepert :(

[ Voor 5% gewijzigd door drm op 13-01-2003 15:15 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • whoami
  • Registratie: December 2000
  • Nu online
SilentThunder schreef op 13 January 2003 @ 15:13:
Nou ja die GROUP BY day lijkt me wel een beetje fout, omdat je nu je hele resultset groupeert op dagnummer. Beter lijkt me een GROUP BY op date?

zoies bv:

code:
1
2
3
4
5
SELECT datum
FROM nieuws
GROUP BY datum
ORDER BY datum DESC
LIMIT 0,3


Die group by is idd niet zo goed. Alle velden uit de select-list die geen aggregated function zijn, moeten in de group by komen.

https://fgheysels.github.io/


  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 25-08 14:08
whoami schreef op 13 januari 2003 @ 15:16:

[...]


Die group by is idd niet zo goed. Alle velden uit de select-list die geen aggregated function zijn, moeten in de group by komen.
psies ;)

heh nee maar goed, grouperen op een dagnummer kan ook niet, want het kan best zijn dat een dagnummer over meerdere jaren vaker voorkomt...dus dan ga je al de fout in.

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • whoami
  • Registratie: December 2000
  • Nu online
Als je de datum van de nieuwspost in die table zitten hebt, dan is het imho toch makkelijk als volgt op te lossen (als je enkel de datum wilt).
code:
1
2
3
4
select DISTINCT nieuws_post_datum
FROM nieuws
ORDER BY nieuws_post_datum
LIMIT 3

oid.

https://fgheysels.github.io/


  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 30-07 19:50

PowerSp00n

There is no spoon

Topicstarter
Ja dit bleek het dus te zijn. Ik heb het nu verandert in het volgende en dan krijg ik wel het goede resultaat.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
  id,
  FROM_UNIXTIME(time, '%Y-%m-%d') AS day,
  time,
  FROM_UNIXTIME(time) AS date
FROM
  news
WHERE
  news=1 AND
  announcement=0
GROUP BY
  day
ORDER BY
  time DESC
LIMIT 3;


Al zijn er nu wel 3 aansluitende dagen met nieuws geeft dit dus het goede resultaat, ik zal zo even proberen of dit ook nog klopt als er een dag tussen mist.

Mickman> Als ik nog niet had nagedacht had ik nog niet eens een query kunnen maken.

  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 25-08 14:08
@whoami: mjah das nog veel logischer, volgens mij ook nog sneller

[ Voor 8% gewijzigd door SilentThunder op 13-01-2003 15:22 ]

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 30-07 19:50

PowerSp00n

There is no spoon

Topicstarter
whoami schreef op 13 januari 2003 @ 15:20:
Als je de datum van de nieuwspost in die table zitten hebt, dan is het imho toch makkelijk als volgt op te lossen (als je enkel de datum wilt).
code:
1
2
3
4
select DISTINCT nieuws_post_datum
FROM nieuws
ORDER BY nieuws_post_datum
LIMIT 3

oid.
Dan bedoel je dus zoiets?

code:
1
2
3
4
5
6
7
8
SELECT
  DISTINCT FROM_UNIXTIME(time, '%Y-%m-%d') as day,
  FROM_UNIXTIME(time) as date
FROM
  news
ORDER BY
  time DESC
LIMIT 3;


Dan krijg ik
code:
1
2
3
4
5
6
7
+------------+---------------------+
| day        | date                |
+------------+---------------------+
| 2003-01-11 | 2003-01-11 23:52:00 |
| 2003-01-11 | 2003-01-11 23:46:03 |
| 2003-01-10 | 2003-01-10 22:55:20 |
+------------+---------------------+

wat niet helemaal de bedoeling is. Of bedoelde je het niet zo?

  • whoami
  • Registratie: December 2000
  • Nu online
Ja, dat krijg je dus doordat je rekening gaat gaan houden met de tijd.

Doe eens:

code:
1
2
3
4
5
6
7
8
9
SELECT
  DISTINCT FROM_UNIXTIME(time, '%Y-%m-%d') as day,
  MAX(FROM_UNIXTIME(time)) as date
FROM
  news
GROUP BY day
ORDER BY
  time DESC
LIMIT 3;

https://fgheysels.github.io/


  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 30-07 19:50

PowerSp00n

There is no spoon

Topicstarter
whoami schreef op 13 januari 2003 @ 15:31:
Ja, dat krijg je dus doordat je rekening gaat gaan houden met de tijd.
Daar had ik dus even niet aan gedacht, de volledige datum had ik er alleen tijdelijk bij gedaan om het te controleren. Het werkt nu met beide query's maar die van whoami is net iets sneller. tnx :P
Pagina: 1