![]() |
![]() ![]() |
![]() |
![]()
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.
W czym może być problem? |
|
|
![]()
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. |
|
|
![]()
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: "<" ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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. |
|
|
![]()
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(...)).
|
|
|
![]()
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:
czyli raczej wszystko jest ok (IMG:style_emoticons/default/biggrin.gif) Dziękuję za szybkie odpowiedzi i za pomoc. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 10:16 |