Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z datą
Forum PHP.pl > Forum > Bazy danych > MySQL
Lechu
Witam,

przechowuje w tabeli dane klientów - ok 40 pól. Jednym z nich jest data urodzenia w formacie timestamp. Jestem teraz w trakcie robienia wyszukiwarki.

Moje pytanie jest następujące:

Jak napisać zapytanie, które zwróci mi klientów z określonego przedziału wiekowego (od ... do ...). Podkreślam, że chciałbym zrobić to z poziomu mysql'a za pomocą jednego zapytania (tzn bez wczesniejszego pobierania wartości pola data_urodzenia z tabeli, obliczania przedzialu, który pożniej wykorzystamy w drugim zapytaniu) ...

Mam nadzieje ze nie za bardzo namieszałem winksmiley.jpg

pozdrawiam
Lechu
SamoChwała
  1. $z = "SELECT idPola
  2. FROM tabela WHERE dataUr BETWEEN '$pocz' AND '$koniec'
  3. ORDER BY dataur";


zmienne: $pocz i $koniec => to daty pobierane z formularza
Vertical
Jedna uwaga: zmienne w MySQL są przedstawiane jako 'zmienna' a nie '$zmienna' (ewentualnie $zmienna jeśli jest zmienną php)
Lechu
Cytat(SamoChwała @ 2005-03-10 16:32:21)
  1. $z = "SELECT idPola
  2.  
  3. FROM tabela WHERE dataUr BETWEEN '$pocz' AND '$koniec'
  4. ORDER BY dataur";


zmienne: $pocz i $koniec => to daty pobierane z formularza

Nie całkiem o to mi chodziło...

Chodzi o to, że dostaje przedział wieku jako jakies dwa int'y, data urodzenia jest jako timestamp i nie bardzo umiem sobie poradzić z zapytaniem, które zwróci mi ludzi o wieku z określonego przedziału.
Jak najlepiej napisać taki warunek?

Kombinowałem tak:
  1. .... WHERE data_ur BETWEEN NOW()-($wiek_od*ilosć_sekund_w_roku) ....


Zdaje sobie sprawe z tego, że tak nie bedzie to raczej działać, ale myśle ze lepiej ilustruje to mój problem winksmiley.jpg.
Jestem przekonany, że znacie jakieś optymalne rozwiązanie.

pozdrawiam Lechu
tts
a, to jak masz timestamp to masz wszystko, zmien sobie format daty na poziomie sqla i masz to co trzeba bo rozumiem ze te dwa inty o ktorych mowisz to jest ilosc lat? date w sqlu mozesz sobie przekonwertowac jak chcesz za pomoca DATE_FORMAT(). jezeli wszystko dobrze zrozumialem to byloby to cos w ten sposob:
  1. $z = "SELECT idPola
  2. FROM tabela WHERE DATE_FORMAT(dataUr,'%Y') as data BETWEEN '$pocz' AND '$koniec'
  3. ORDER BY data;
,
gdzie:
$pocz = $rok_dzis - $lata_limit_dolny,
$pocz = $rok_dzis - $lata_limit_gorny.
Lechu
Mam jeszcze jedno pytanie, teraz z czystej ciekawości.

Czasem przechowywanie daty w polu timestamp może być kłopotliwe (np nieporządane może być automatyczne uaktualnianie się wartości). W takich sytuacjach korzystam czasem z pola int(14).

Czy jest jakaś funkcja analogiczna do DATE_FORMAT(), którą możnaby wykorzystać w takim przypadku?

pozdrawiam
Lechu
tts
mozesz skorzystac z pola typu DATETIME( ).
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.