Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Konwersja daty do formatu timestamp
SeaDog
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.11.2010

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


Witajcie, mam problem z konwersją daty do formatu timestamp.

W bazie danych znajdują się pola typu: DATE i DATETIME
Chcę wykonać zapytanie, które zliczy ilość rekordów dodanych w ostatnim tygodniu.
Zapytanie ma być bardzo dokładne, dlatego też chcę połączyć pola "date" i "time", żeby uwzględniane były również godziny, minuty, sekundy
i skonwertować je do formatu timestamp a następnie porównać z datą obecną.

Gdy używam samego pola date, wszystko jest ok.
Jeśli łączę pola funkcją concat i do funkcji unix_timestamp wrzucam nazwę połączonych pól,
wtedy poniższe zapytanie zwraca błąd.

  1. mysql_query("SELECT count(*),concat(date,time) as data WHERE unix_timestamp(DATE_ADD(data, INTERVAL + 7 DAY)) < unix_timestamp(NOW())");


W czym może być problem?
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Bo UNIX_TIMESTAMP() oczekuje jako argumentu daty (i czasu), a nie tekstu.

Po co w ogóle konwertujesz do formy timestampu? Jedna kolumna typu DATETIME (czemu masz osobne?) i przy pomocy normalnych funkcji do porównywania dat wyszukaj te sprzed tyg.
Go to the top of the page
+Quote Post
SeaDog
post
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.11.2010

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


Upss... nastąpiła mała pomyłka. Mam osobne pola dla daty i czasu. Jedno pole jest typu DATE,
drugie typu TIME. Rozdzieliłem czas i datę.
Tak się teraz zastanawiam i faktycznie lepiej by było, gdyby było jedno pole typu DATETIME.
Dlaczego konwertuję do czasu Unixowego?...
Mam skrypt PHP, który sprawdza odległość czasową i tak dla przykładu:
Jeśli użytkownik wystawi komentarz, to musi upłynąć cały jeden dzień, żeby mógł wystawić następny.
W tym celu użyłem funkcji strtotime();, czyli też po prostu zamieniłem czas na czas unixowy.
Tak samo chciałem zrobić z zapytaniem MySql.

Crozin, czyli sugerujesz zamienić te dwa pola na jedno i nie bawić się z UNIX_TIMESTAMP?
Tak czy siak do sprawdzanej daty muszę dodać 7 dni. Następnie porównuję ją z obecną.
Zatem jak powinno wyglądać takie zapytanie? Wystarczy sam operator porównania: "<" ?
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Tak, wystarczy sam operator porównania:
  1. ... WHERE created_at > DATE_SUB(NOW(), INTERVAL 7 DAY) ...
Go to the top of the page
+Quote Post
SeaDog
post
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.11.2010

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


Poprawiłem strukturę bazy danych, kod też zmieniłem i teraz bardzo ładnie to wszystko działa.
Dokładnie o taki efekt mi chodziło (IMG:style_emoticons/default/biggrin.gif)

Tylko mam jeszcze pytanko tak z czystej ciekawości.
Crozin, po co użyłeś tego parametru/funkcji created_at >? bez tego też działa.
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Uznałem, że kolumna z datą utworzenia to właśnie created_at, a Ty przecież chcesz wyszukać tylko te rekordy w których data dodania (czyli ta kolumna) zawiera datę nie starszą (>) niż 7 dni (DATE_SUB(...)).
Go to the top of the page
+Quote Post
SeaDog
post
Post #7





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 15.11.2010

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


No tak, racja, nie załapałem.

Moje zapytanie wygląda tak:

  1. mysql_query("SELECT * FROM comment WHERE date > DATE_SUB(NOW(), INTERVAL + 7 DAY) ORDER BY date DESC");


czyli raczej wszystko jest ok (IMG:style_emoticons/default/biggrin.gif)

Dziękuję za szybkie odpowiedzi i za pomoc.
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 - 10:16