Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Szukanie od i do danej godziny
Forum PHP.pl > Forum > Bazy danych
SN@JPER^
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.
salfunglandyare
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.
SN@JPER^
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.
salfunglandyare
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
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.