Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Szukanie od i do danej godziny
SN@JPER^
post
Post #1





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Witam.

Mam tabele xxx, a w nim pola z dwiema datami (przedział od - do). Jak przeszukać pierwsze pole od danej godziny (od 15:00), natomiast drugie do danej godziny (np. 15:00)? Daty zapisane unixowo.

Ten post edytował SN@JPER^ 5.05.2015, 16:55:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
salfunglandyare
post
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

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


Może tak:
  1. SELECT * FROM xxx WHERE twoj_unixtimestamp BETWEEN `od` AND `do`;

dostaniesz wszystkie rekordy ktorych od >= twoj_unixtimestamp i do <= twoj_unixtimestamp.
jeśli zamiast timestampa chcesz podawac date, wtedy uzyj unix_timestamp('yyyy-mm-dd hh:mm:ss')
jesli chcesz porownywac tylko godziny (bez konkretnego dnia):
  1. SELECT * FROM xxx WHERE '15:00:00' BETWEEN time(from_unixtime(`od`)) AND time(from_unixtime(`do`));

Wydajność tego ostatniego jest jednak dość mała, lepiej dodać kolejne pola typu time, nałożyć na nie indeksy i sprawdzać po tych polach.
Go to the top of the page
+Quote Post
SN@JPER^
post
Post #3





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Ogólnie wyszukuje dany dzień, od i do godziny 15:00. Zajętość pokoju hotelowego - tzw. doba hotelowa.

Czyli załóżmy, ktoś sprawdza zajętość pokoju od 15:00 5 maja do 15:00 8 maja.
Go to the top of the page
+Quote Post
salfunglandyare
post
Post #4





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

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


Napisz, czy dobrze rozumiem:
W polu `od` masz datę rozpoczęcia zajętości, w polu `do` - datę zakończenia zajętości. Wyszukujesz też 2 daty - rozpoczęcia zajętości i zakończenia zajętości więc w twoim przypadku:
  1. SET @data_od := '2015-05-05 14:00:00';
  2. SET @data_do := '2015-05-08 12:00:00';
  3. SELECT * FROM xxx WHERE `od` < unix_timestamp(@data_do) AND `do` > unix_timestamp(@data_od)

dostaniesz wszystkie zajęte pokoje w terminie ('2015-05-05 14:00:00'; '2015-05-08 12:00:00'). Mogą być zajęte np od 2015-05-03 14:00:00 do 2015-05-06 12:00:00 lub 2015-05-07 14:00:00 do 2015-05-10 12:00:00 lub 2015-05-06 14:00:00 do 2015-05-07 12:00:00
Zamiast ustawiania @zmiennych w mysql możesz je podać z PHP lub innego jezyka
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: 20.08.2025 - 16:49