[mySQL] text op datum uit db trekken

Pagina: 1
Acties:

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Zie onderwerp... Uitleg: er staan verschillende teksten in een db met een datum veld erbij. Ik wil nu twee dingen daarmee kunnen doen:

1. alleen die tekst met de laatste datum
2. alle teksten die ouder zijn

Is dat te doen met een sql-query, of wordt dit puur PHP gemier?

[ specs ] [ Tweaker gallery ]


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

das toch niet zo moeilijk?
je hebt het probleem volgens mij al helemaal door
dus je moeter alleen nog maar een query van maken

Doet iets met Cloud (MS/IBM)


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ja, en daar gaat het nou net mis... HOE maak ik die query?

[ specs ] [ Tweaker gallery ]


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
select * from blaat where datum <$datum ofzo?

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Op vrijdag 19 oktober 2001 17:06 schreef Nielsz het volgende:
select * from blaat where datum <$datum ofzo?
Gaat niet zo, er is geen $datum... Die gegevens staan dus allemaal in de db.

De eerste query is misschien nog te verzinnen...

select * from blaat where datum = max(datum)

ofzo? kan dat?

Die tweede, precies het tegenovergestelde dus, weet ik niet.

Edit: goed, dat kan dus niet, die query daarboven. Maar als het niet zo moeilijk is (D2k), leg het me dan eens uit...

[ specs ] [ Tweaker gallery ]


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Grmbl... Ik zit van alles te proberen met max en group by dingen, maar het wil niet werken! |:( Volgens mij is het inderdaad poepsimpel, maar ik kom er niet uit! Pleazzz help!

[ specs ] [ Tweaker gallery ]


Verwijderd

1.
probeer dit eens:
code:
1
select * from tabel where unix_timestamp(datum veld)-unix_timestamp(now()) > 0 order by datum veld DESC limit 1

2.
probeer dit eens:
code:
1
select * from tabel where unix_timestamp(datum veld)-unix_timestamp(now()) > 0 order by datum veld DESC

op linux moet unix_timestamp werken, op windows bak weet ik niet!

unix_timestamp geeft de tijd en datum terug in seconden

:7 B-) 8-)

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Bedankt voor 't antwoord. Ik zat er ERG op te wachten! :)

Helaas is het niet wat ik zoek. Ik probeerde eerder al onderstaande uitleg te posten, maar het forum zit enorm te buggen. Bij deze nog een poging.

Ik zal m'n probleem nog eens opnieuw uiteenzetten. Misschien helpt dat.

Ik heb een tabelletje:

nummer, titel, datum, tekst

Nummer is geen id ofzo, maar meer een nummer om de teksten te groeperen (group by! :)) So far so good... Maar van zo'n groepje teksten met hetzelfde nummer, wil ik nu de row die de hoogste (laatste = nieuwste) datum heeft. Max? Ik kom er niet uit...

Ook wil ik het tegenovergesteld. Dus je hebt nieuwste tekst en oudere teksten.

Ik heb dus al:
code:
1
select nummer,titel,datum from raporten where nummer != 0 group by nummer

(sommige raporten hebben dus nummer 0, die moeten niet worden meegeteld.) Die query werkt prima, afgezien van het feit dat ik niet het nieuwste raport terugkrijg, maar gewoon 'een' raport... volgens mij compleet willekeurig.

Hoe pas ik die query aan zodat ik de nieuwste krijg? En hoe pas ik 'm aan zodat ik juist de rest krijg (alles, behalve de nieuwste dus)?

[ specs ] [ Tweaker gallery ]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ff een voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
nummer datum ...
================
1   100 
1   103
1   104 <-- die wil je
2   100
2   102
2   106 <-- die wil je
3   100
3   103
3   107 <-- en deze ook nog

klopt dat?

dan denk ik:
code:
1
2
SELECT nummer, titel, datum FROM rapporten 
WHERE nummer != 0 HAVING datum = MAX(datum) GROUP BY nummer

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ik krijg zo'n ohja-erlebnis...

Ziet er goed uit, je uitleg klopt inderdaad. Echter, die query levert (om een voor mij onbegrijpbare reden), maar 1 regel terug. Overigens heb ik 'm wel moeten verbouwen tot:
code:
1
select nummer,datum,titel from raporten where nummer != 0 group by nummer having datum = max(datum)

Als je group by en having omdraait dan krijg je een lege result-set terug. En op bovenstaande manier dus maar 1 rij. Hm... Ik krijg nog geen koppijn van dit ding, maar het zal niet meer lang duren. |:(

En hoe zou 't dan moeten met precies het omgekeerde? Dus niet het nieuwste raport, maar juist alle raporten, die een afzonderlijk nummer hebben en niet de nieuwste zijn? 'having datum != max(datum)' ? Hmja... nog effe doormieren. 'k Ben er bijna uit... :)

[ specs ] [ Tweaker gallery ]


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Hm... Na een joint kom ik op de volgende alternatieve methode:
code:
1
select num,date,title from insreports where num != 0 order by num,date group by num

Echter... Dat mag niet van mySQL! Group by mag daar blijkbaar niet staan. Klopt het dat dat de mySQL-engine zo'n query van links naar rechts uitvoert? Als ik nl. de group by voor de order by zet, dan krijg ik verkeerde resultaten, alsof er eerst 1 nr. uit de lijst wordt gepikt en dus vervolgens de order by niks meer uithaalt.

Als bovenstaande query zou werken, dan zou ik er uit zijn... Bugger! |:(

[ specs ] [ Tweaker gallery ]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Klopt het dat dat de mySQL-engine zo'n query van links naar rechts uitvoert?
nee, dat klopt niet. maar de volgorde van de woorden maakt wel uit, zie:
http://www.mysql.com/doc/S/E/SELECT.html

GROUP BY moet dus voor ORDER BY

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Op vrijdag 19 oktober 2001 22:12 schreef marcusk het volgende:

[..]

nee, dat klopt niet. maar de volgorde van de woorden maakt wel uit, zie:
http://www.mysql.com/doc/S/E/SELECT.html

GROUP BY moet dus voor ORDER BY
Dat is jammer, dan werkt die query die ik inmiddels verzonnen had ook niet. Having moet dus overigens ook NA group by. :) Dus die query die je boven postte werkt ook niet.

Ben ik nou gek of zit mySQL gewoon enorm te buggen?! Dit is toch een redelijk normale query? Zoiets moet toch gewoon simpel te doen zijn? :r

Ik denk dat ik 't maar opgeef en de hele result-set laat afzoeken door een stukkie php. Dan heb ik het tenminste over 10 minuten af. Ben nu al uuuuuuuuuren aan het klooien met die mySQL-shit.

[ specs ] [ Tweaker gallery ]


Verwijderd

Explore,

Ik heb nog ff zitten proberen hier en het nagemaakt....

en als ik het volgende doe in mysql dan krijg ik het gewenste resultaat (ieg voor punt 1) terug:
code:
1
select nummer,titel,max(datum) as datum from rapporten group by nummer order by nummer ASC,datum DESC;

voor punt 2 weet ik hem nog niet maar die stuur ik later misschien nog in.... nu moet ik naar het voetbalveld!! :9

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
't Is dus HEEL maf dat de volgende query bij mij precies hetzelfe resultaat heeft:
code:
1
select nummer,titel,datum from raporten group by nummer

Volgens mij is er iets niet pluis met die datums. Ik ga effe aan de gang met die unix_timestamp toestand. Wellicht helpt dat.

[ specs ] [ Tweaker gallery ]


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
klappie:
code:
1
select nummer,titel,max(datum) as datum from rapporten group by nummer order by nummer ASC,datum DESC;
Deze query geeft inderdaad de juiste resultaten met dat db'tje wat marcusk hier postte. Vreemd genoeg doet die query het niet in mijn db. Ik heb zo het idee dat het aan die datumvelden ligt. Die dingen zien er zo uit: 20-10-2001, ipv. bv. een unix-timestamp. Als ik ze daarnaar converteer met de unix_timestamp functie, dan haalt het ook niks uit, overigens. Wel maf...

Ben je al uitgevoetbald? :)

[ specs ] [ Tweaker gallery ]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 20 oktober 2001 20:59 schreef Explore het volgende:
Die dingen zien er zo uit: 20-10-2001, ipv. bv. een unix-timestamp. Als ik ze daarnaar converteer met de unix_timestamp functie, dan haalt het ook niks uit, overigens. Wel maf...
Komt dat niet omdat de datum voor de UNIX_TIMESTAMP functie 'yyyy-mm-dd' moet zijn ipv 'dd-mm-yyyy' ?

Verwijderd

Marcusk heeft gelijk:

Unix_timestamp werkt alleen maar als je de datum notatie YYMMDD of YYYYMMDD gebruikt...

Dit wist ik dus ook niet, da's een beetje minder! |:(

van welk type is dat datum veld?? Een date veld of gewoon een varchar die je zelf opbouwd??

En ik ben inderdaad uitgevoetbald, tenminste mijn broer moest voetballen.

Ik ben een van de vaste toeschouwers van het bierteam!!

Helaas hebben ze 4 - 1 verloren!!
Pagina: 1