Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Porownanie dat --> user musi miec ukonczone 18 lat
Forum PHP.pl > Forum > Bazy danych > MySQL
luckyluc
Mam problem z data. Posiadam baze danych, w ktorej przy kazdym userze jest wpisana data urodzenia w formacie rrrr-mm-dd. Za pomoca skryptu potrzebuje okreslic wzgledem aktualnej daty czy dana osoba ma ukonczone 18 lat lub wiecej. Jak to wykonac? Jaka funkcje zastosowac, aby dokladnosc weryfikacji byla co do dnia?

PRZYKŁAD:
data aktualna: 2006-06-27
data ur. usera: 1988-06-30

Jak to porownac w SELECT, aby wyciagnal rekordy tylko spełniające warunek ukonczenienia 18 lat.
nospor
Cytat
Jak to porownac w SELECT,
Pytasz o bazki a dajesz w php... Przenosze

http://dev.mysql.com/doc/refman/5.0/en/dat...-functions.html
Milej lektury smile.gif
luckyluc
Zastanowilem sie i mam taki pomysl:

1. dodac do kazdej daty przy userze 18 lat lub 216 miesiecy
2. okreslic aktualna date
3. porownac dwie daty i jezeli powiekszona o 18 lat data usera bedzie rowna lub miejsza od aktualnej to warunek bedzie spelniony.

<?php
$zapytanie = "SELECT * FROM tabela LEFT JOIN user ON (user.id=tabela.user AND NOW() >= DATE_ADD('user.data', INTERVAL 216 MONTH)) WHERE tabela.data='$data' ORDER BY tabela.data ASC, tabela.czas ASC";
?>


Na logike powinno dzialac, ale nie dziala. Czy ktos wie co moze byc zle ?
Spirit86
chcesz po prostu gotowca :]

masz podpowiedź:

SELECT cos FROM tabela WHERE YEAR(urodzony)>1988= AND MONTH(urodzony)>=6

pisane z palca, powinno dzialac z dokladnością co do miesiąca, dalej kombinuj sam.

P.S. Nie twierdzę, że nie ma innych rozwiązań...
nospor
w linku co ci podalem, na samym początku masz przyklad
  1. SELECT something FROM tbl_name WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

Zwraca ci to rekordy z ostatnich 30 dni. No to juz wystarczyla odrobiny wsyliku by zamienic DAY na YEAR, 30 na 18 oraz <= na >=
  1. SELECT something FROM tbl_name WHERE DATE_SUB(CURDATE(),INTERVAL 18 YEAR) >= date_col;

widzisz jakie proste smile.gif

edit: nie dolukalem ze cos tam juz naskrobales smile.gif
luckyluc
Przeczytalem cala strone, ktora podales. Nie oczekuje gotowego przykladu. Walcze i stosuje metode prob i bledu smile.gif Z punkty logicznego podstawilem wszystko tak jak ma byc. Mimo wszystko nie dziala sad.gif Zauwazylem, ze jak wpisze date z klawiatury np. '2006-06-28' to jest wszystko ok. Problem pojawia sie gdy podam user.data. Dlaczego tak sie dzieje ?


$zapytanie = "SELECT * FROM glowna, user WHERE glowna.data='$data' AND INTERVAL 18 YEAR + user.data < NOW() AND user.id=glowna.user ORDER BY glowna.data ASC, glowna.czas ASC";
nospor
user.data ma nie byc w ciapkach. no i czemu 216 MONTH? nie lepiej 18 YEAR?
luckyluc
Cytat(nospor @ 28.06.2006, 08:33 ) *
user.data ma nie byc w ciapkach. no i czemu 216 MONTH? nie lepiej 18 YEAR?



Probowalem rozne warianty i 18 YEAR i 216 MONTH. Zaden nie dziala. Wiem, ze ciapek ma nie byc. To byl stary przyklad. Dziwne, jest to, ze podana recznie 'data' dziala aaevil.gif


$zapytanie = "SELECT * FROM glowna, user WHERE glowna.data='$data' AND INTERVAL 18 YEAR + user.data < NOW() AND user.id=glowna.user ORDER BY glowna.data ASC, glowna.czas ASC";
nospor
A czemu nie mozesz zastosowac zapytania co ci podalem? To twoje jakos mi podejrzanie wyglada winksmiley.jpg

ps: no i uzywaj bbcode!!!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.