Toon posts:

[php mysql] geboorte datum

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik wil een soort zoek functie maken in m'n database
in m'n database staan de geboorte datums als volgt

Y-d-m
dus
1988-28-08

als voorbeeld,
kan iemand mij helpen met de volgende query:


$zoekleeftijd //leeftijd die ik zoek
$jaar1= ( Y-$zoekleeftijd) // 1985 // dit jaar min jaar dat ik zoek
$jaar2= ( $jaar1 - 1) // 1984 // jaar wat ik hierboven heb gevonden -1

select * from gebruikers where datum > ($jaar2 d m) and leeftijd < ($jaar1 d m)


in dit stukje
select * from gebruikersnaam where datum > ($jaar2 d m) and leeftijd < ($jaar1 d m)
$zoekleeftijd
$jaar1= ( Y-$zoekleeftijd) // 1985
$jaar2= ( $jaar1 - 1) // 1984

klopt het niet met de datum... hoe kan dat?
ik kan vrij weinig met cijfers in php... dus kan iemand misschien voordoen hoe het hoort?

en mijn query kloppend maken met date( )

want van datums enz snap ik nix

Verwijderd

*Untested :p*
PHP:
1
2
3
4
5
6
$jaar1 = date("Y", time());
$jaar2 = $jaar1 - $zoekleeftijd;
$jaar3 = $jaar2 - 1;

$sql = "SELECT * FROM gebruikers WHERE datum > '$jaar2' AND leeftijd > '$jaar3'";
$result = mysql_query($sql);


Ofzoiets? Ik vind je beschrijving een beetje onoverzichterlijk

[herstel] single quotes |:(

Verwijderd

Topicstarter
hij moet ook naar dag en maand kijken
dus stel jaar 1 is 1985 en jaar 2 is 1984

nee het moet zijn
iedereen TUSSEN jaar 2 en jaar 1

dus groter dan jaar2 en kleiner dan jaar 1


($jaar2 d m) and leeftijd < ($jaar1 d m)

Verwijderd

Topicstarter
( en dan ook nog met

d en m
( dag en maand )
dus als de gezochte leeftijd 17 jaar is
wordt $jaar1 1985
en $jaar2 1984

dus dan moet iedereen die

GROTER DAN 1984 d m AND KLEINER DAN 1985 d m

hier is d dag en m maand ( moet time stamp voorstellen in totaal )

Verwijderd

Topicstarter
en dat heeft toch nix te maken met time() of wel?

Verwijderd

Wat veel handiger is om te zoeken is de geboorte data opslaan in Unix timestamps. Dan kun je inderdaad op deze manier zoeken binnen 1 query.

Dan krijg je zoiets als

code:
1
SELECT * FROM gebruikers WHERE datum > 998755632 and leeftijd < 985755632


Door data in mysql opslaan als 'leesbare' data (3-12-1981 of 12-03-1981 ofzoiets) loop je tegen dit soort problemen aan. Zie de date and time functions in de manual voor extra uitleg.

Verwijderd

Topicstarter
nou in principe hoeft het geen probleem te zijn.... als die query werkt... en die moet toch ook kunnen werken?

iedereen selecteren tussen 2 data?

Verwijderd

Topicstarter
$zoekleeftijd
$jaar = date("Y")
$jaar1 = $jaar - $zoekleeftijd;
$jaar2 = $jaar1 - 1;

$datum1 = "$jaar2-date("d-m")
$datum2 = "$jaar1-date("d-m")
select * from gebruikersnaam where datum > ($datum1) and < (datum2)

Verwijderd

denk je dat mysql die d m snaptt dan? zul je hem eerst moeten uitleggen. Voorkom gewoon een hoop nodeloos gekloot en sla data op in timestamps. Dat maakt het gepraat tussen php en mysql veel gemakkelijker. Bedenk wel dat een computer veel meer tussenstappen moet maken, het kreng kan niet uitzichzelf ddingen gaan verzinnen.
Als mysql 3-12-1981 ziet staan denkt hij niet uit zichzelf 'hee dat zal wel een datum zijn', dat moet je hem eerst uitleggen. Bijvoorbeeld door er een date veld in Mysql van te maken.
Maar als mysql het getal 99885326 ziet staan denk mysql 'cool een getal, daar kan ik mee werken'.
Bovendien zijn integer velden sneller (dacht ik).

[edit]
Je gaat er nu van uit dat mysql het datum veld als een integer ziet (je werkt namelijk met < & >). Volgens mij kan mysql dat helemaal niet.

[ Voor 0% gewijzigd door Verwijderd op 10-08-2002 19:05 . Reden: Had je tweede repliedje gemist ]


Verwijderd

Topicstarter
ja maar eh als het veld waar ie in moet zoeken nu toevallig een "date" field is?

Verwijderd

Zoals ik al zei, ik werk uitsluitend met int of eventueel bigint velden voor data. Maar misschien heb je wat aan de manual van mysql en dat met name aan dit stukje:
http://www.mysql.com/doc/en/Date_calculations.html
Ik weet het anders ook niet.

Verwijderd

Topicstarter
je kunt wel sorteren in date maar niet zoeken in date?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 10 augustus 2002 @ 18:51:
Wat veel handiger is om te zoeken is de geboorte data opslaan in Unix timestamps. Dan kun je inderdaad op deze manier zoeken binnen 1 query.

Dan krijg je zoiets als

code:
1
SELECT * FROM gebruikers WHERE datum > 998755632 and leeftijd < 985755632


Door data in mysql opslaan als 'leesbare' data (3-12-1981 of 12-03-1981 ofzoiets) loop je tegen dit soort problemen aan. Zie de date and time functions in de manual voor extra uitleg.
Leuk... Ik kom uit 1968 hoe sla je dat op in een timestamp formaat????

Aantwoord: NIET... timestamp gaat vanaf 1970...

Wat je volgens mij kan doen... niet getest...

code:
1
select jaar from gebruikersnaam where YEAR(datum) between $jaar1 and $jaar2

Programmer - an organism that turns coffee into software.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Speciaal voor het opslaan van datums zijn er de datum (date / datetime) typen...
Ga dan alsjeblieft geen unix_timestamp of whatever gebruiken...

Verder zijn er zat functies in mysql om met die datums te berekenen, "zoeken" etc in dates kan daar ook prima mee.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...


Verwijderd

Gewoon date(time) fields gebruiken en dan de van-tot selecties met BETWEEN ophalen.

Verwijderd

Waren mysql timestamps niet anders dan unix timestamps? volgens mij is een mysql timestamp geen secondes vanaf 1970 maar gewoon een getal in het formaat YYYYMMDDhhmmss

http://www.mysql.com/doc/en/DATETIME.html
Pagina: 1