Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Poprawność zapytania MySQL
trifek
post
Post #1





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

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


Witam serdecznie,
Mam taki kod:
  1. $aktualny_czas = date("Y-m-d H:i:s");
  2. SELECT gt_id, tytul FROM cms_push WHERE datarozeslania > '$aktualny_czas' and data_konca_rozsylania < '$aktualny_czas'


datarozeslania - data OD kiedy rozpoczynamy rozsyłanie wiadomości
data_konca_rozsylania - data KOŃCA rozsyłania

Kolumny w tabeli: data_konca_rozsylania, datarozeslania są typu datetime.

Czy powyższe zapytanie jest poprawne?


Dziękuję bardzo za pomoc smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Zamiast tego możesz użyć natywną funkcję NOW()


--------------------
Go to the top of the page
+Quote Post
trueblue
post
Post #3





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Żadnego rekordu zapytanie nie wybierze. Chyba, że takie gdzie datarozeslania jest większa od data_konca_rozeslania.
Jakie rekordy chcesz wybrać?


--------------------
Go to the top of the page
+Quote Post
trifek
post
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

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


chcę żeby mi to zawsze zwracało rekordy które powinni być rozesłane (czyli data i czas większa od datarozeslania) - ale też "teraz" nie może przekroczyć daty końca rozsyłania (data_konca_rozsylania) smile.gif
Nie wiem czy zrozumiale to napisałem?
Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


TERAZ>=datarozeslania AND TERAZ<=data_konca_rozsylania

Jeśli będziesz podstawiał datę w postaci stringa, zapytanie zacacheuje się, w przypadku NOW(), nie.



--------------------
Go to the top of the page
+Quote Post
trifek
post
Post #6





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 28.09.2015

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


Czyli coś takiego:
  1. SELECT gt_id, tytul FROM cms_push WHERE NOW() >= datarozeslania AND NOW() <= data_konca_rozsylania


questionmark.gif smile.gif
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Sprawdź.


--------------------
Go to the top of the page
+Quote Post
franki01
post
Post #8





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Znaki większości mają kluczowe znaczenie. W pierwszym poście są zwrócone w złą stroną, w poście powyżej są użyte poprawnie. Co do NOW() - nie ufaj temu w 100%, jeśli nie poleciłeś wcześniej MySQL użycie poprawnej strefy czasowej. Najprościej będzie, jeśli weźmiesz zapytanie z pierwszego posta i oba znaki większości zamienisz w drugą stronę.

Przepraszam @trueblue, że napisałem to samo, ale chyba nie lubisz pisać wprost smile.gif

Ten post edytował franki01 1.07.2016, 22:26:45
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Do PHP to samo się odnosi. Bez konfiguracji default timezone tak samo błędny czas będzie zwracany.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 20:04