Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z datą
Lechu
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 12.06.2002
Skąd: opole/wrocław

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


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

pozdrawiam
Lechu
Go to the top of the page
+Quote Post
SamoChwała
post
Post #2





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 28.07.2004
Skąd: Łódź

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


  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
Go to the top of the page
+Quote Post
Vertical
post
Post #3





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

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


Jedna uwaga: zmienne w MySQL są przedstawiane jako 'zmienna' a nie '$zmienna' (ewentualnie $zmienna jeśli jest zmienną php)

Ten post edytował Vertical 10.03.2005, 19:09:19
Go to the top of the page
+Quote Post
Lechu
post
Post #4





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 12.06.2002
Skąd: opole/wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Jestem przekonany, że znacie jakieś optymalne rozwiązanie.

pozdrawiam Lechu

Ten post edytował Lechu 12.03.2005, 23:23:51
Go to the top of the page
+Quote Post
tts
post
Post #5





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 14.02.2005

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


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





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 12.06.2002
Skąd: opole/wrocław

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


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
Go to the top of the page
+Quote Post
tts
post
Post #7





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 14.02.2005

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


mozesz skorzystac z pola typu DATETIME( ).
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: 23.08.2025 - 21:21