Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Porownanie dat --> user musi miec ukonczone 18 lat, NIE DZIAŁA !!!
luckyluc
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.04.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował luckyluc 27.06.2006, 18:12:10
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
luckyluc
post
Post #3





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.04.2006

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował luckyluc 28.06.2006, 09:28:50
Go to the top of the page
+Quote Post
Spirit86
post
Post #4





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ń...
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit: nie dolukalem ze cos tam juz naskrobales (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
luckyluc
post
Post #6





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.04.2006

Ostrzeżenie: (0%)
-----


Przeczytalem cala strone, ktora podales. Nie oczekuje gotowego przykladu. Walcze i stosuje metode prob i bledu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Z punkty logicznego podstawilem wszystko tak jak ma byc. Mimo wszystko nie dziala (IMG:http://forum.php.pl/style_emoticons/default/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";

Ten post edytował luckyluc 28.06.2006, 09:38:13
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




user.data ma nie byc w ciapkach. no i czemu 216 MONTH? nie lepiej 18 YEAR?
Go to the top of the page
+Quote Post
luckyluc
post
Post #8





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.04.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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";

Ten post edytował luckyluc 28.06.2006, 09:43:33
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A czemu nie mozesz zastosowac zapytania co ci podalem? To twoje jakos mi podejrzanie wyglada (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

ps: no i uzywaj bbcode!!!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:41