Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Porównywanie dat
Forum PHP.pl > Forum > Przedszkole
cent4
Mam coś takiego:
  1. $data_dzisiejsza=date("Y-m-d");
  2. $miesiac="4";
  3. echo "data dzisiejsza: ".$data_dzisiejsza;
  4. $data_mniejsza=date("Y-m-d",strtotime("-".$miesiac." months"));
  5. echo "<br>data mniejsza: ".$data_mniejsza;
  6. if ($data_dzisiejsza>$data_mniejsza) echo "<br />dzisiejsza mniejsza od mniejszej";

Czy dobrze rozumiem porównywanie dat?
Czy to tak się robi?
nospor
Dat nie porównuje się jako tekst jak ty to robisz. Daty się porównuje np. jak liczba czyli np. timestamp, który zwraca np. strtotime
cent4
Ok już rozumiem, a jak to wpiąć w zapytanie SQL:
  1. $SQL = "SELECT m.id, m.Med, m.Kat, m.Nr_id, m.Autor, m.Tytul, m.Wydawnictwo, m.Miasto, m.Rok, m.Opis, m.Obcojezyczne, e.id, e.Med, e.Kat, e.Data_wpr FROM media AS m JOIN egzempl AS e ON e.med = m.med AND e.kat = m.kat AND e.nr_id = m.nr_id WHERE "(strtotime('e.Data_wpr')>=strtotime($data_wczesniejsza))"
nospor
sql to nie php.......
w sql możesz normalnie porównywać daty.
cent4
W bazie są dane typu: "2011-08-02" - jak zatem porównywać to z wybraną opcją z formularza - od 1 do 36 - to miesiące, zmienna "$miesiac"...
Żeby wyszukał wszystkie rekordy gdzie gdzie e.Data_wpr>=daty obecnej pomniejszonej o $miesiac?
nospor
http://dev.mysql.com/doc/refman/5.5/en/dat...-functions.html
PIerwszy przykład na tej stronie, która notabene jest manualem, odpowiada na Twoje pytanie.
Cytat
Here is an example that uses date functions. The following query selects all rows with a date_col value from within the last 30 days:
mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
cent4
Wszystko powoli się wyjaśnia ale nadal coś jest nie tak:
  1. $SQL = "SELECT m.id, m.Med, m.Kat, m.Nr_id, m.Autor, m.Tytul, m.Wydawnictwo, m.Miasto, m.Rok, m.Opis, m.Obcojezyczne, e.id, e.Med, e.Kat, e.Data_wpr FROM media AS m JOIN egzempl AS e ON e.med = m.med AND e.kat = m.kat AND e.nr_id = m.nr_id WHERE DATE_SUB(CURDATE(),INTERVAL '.$miesiac.' MONTH) <= e.Data_wpr;


Jak daję wartość z palca - wszystko działa ok:
  1. $SQL = "SELECT m.id, m.Med, m.Kat, m.Nr_id, m.Autor, m.Tytul, m.Wydawnictwo, m.Miasto, m.Rok, m.Opis, m.Obcojezyczne, e.id, e.Med, e.Kat, e.Data_wpr FROM media AS m JOIN egzempl AS e ON e.med = m.med AND e.kat = m.kat AND e.nr_id = m.nr_id WHERE DATE_SUB(CURDATE(),INTERVAL 24 MONTH) <= e.Data_wpr;
nospor
Cent, chlopie.... zapoznaj się z podstawami i poducz trochę jak się wstawia zmienne do tekstów :/
cent4
Wstyd przyznać ale próbuję już wszystkiego: "..", '..', "", '' i dalej nic.
Ale w końcu jestem w dziale przedszkole ;-)
nospor
".."
Akurat to wlaśnie jest poprawne w tym przypadku...

Jeśli nadal ci nie działa to:
Temat: Jak poprawnie zada pytanie

Ten temat powinieneś już chyba znać na pamięć.
cent4
W firebugu dostałem info: Could not execute query.Something is wrong in your syntax obok ') <= e.Data_wpr
a jest tak jak było wcześniej ".."
nospor
W linku co ci podalem, było jeszcze napisane byś robił:
echo $SQL;
Czy naprawdę tak cięzko dostosować się do tych paru prostych napisanych po polsku wskazówek?

Cytat
a jest tak jak było wcześniej ".."
Nie, wcześnie było '..'. A ma być ".."
Dostosuj się do wskazówek i pokaż lepiej kod jaki masz teraz.
cent4
Działa - ta zmienna była przekazywana przez sesje i zapomniałem na początku pliku dać: session_start();.
Po Twoich sugestiach - wyechowałem tę zmienną przed SQL i po i w ogóle jej nie było - co jest oczywiste bo sesja nie była obsługiwana.
Dzięki już działa.
nospor
Cytat
o Twoich sugestiach - wyechowałem tę zmienną przed SQL i po i w ogóle jej nie było - co jest oczywiste bo sesja nie była obsługiwana.

Moją sugestią było przedewszystkim, byś zastosował się do wszystkich wskazówek.

A jedną z nich jest wyświetlanie wszystkich błędów. Gdybyś je włączył to byś dostał błędy o tym, że ta zmienna nie istnieje.
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-2025 Invision Power Services, Inc.