murek5
16.12.2012, 23:00:36
Witam wszystkich
Bardzo byłbym wdzięczny za pomoc w ułożeniu zapytania SQL.
Mianowicie, mam tablicę w bazie danych, w której każdy rekord ma 2 kolumny: 'StartTime', 'EndTime', które oznaczają początek i koniec rezerwacji w systemie obiektu turystycznego. Chciałbym (o ile to możliwe) stworzyć zapytanie do bazy, aby ta wyświetliła mi wszystkie dni z przedziału <StartTime,EndTime> wraz z ilością wystąpień danego dnia. Krótko mówiąc, żeby było wiadomo ile rezerwacji jest naraz danego dnia.
Oczekiwany wynik zapytania:
---------------------------------
Data: | Ile_rezerwacji
---------------------------------
01-12-2012 | 4
02-12-2012 | 3
05-12-2012 | 1
(...) | (...)
---------------------------------
mmmmmmm
16.12.2012, 23:55:49
W MYSQL w prosty sposób się nie da. W postgreSQL się da.
Np.
SELECT daty, Count(*) FROM generate_series(data_poczatkowa, data_koncowa, 1) daty, tabela WHERE daty BETWEEN tabela.StartTime AND EndTime GROUP BY 1
murek5
17.12.2012, 18:58:15
Całą bazę mam w MySQL, także pozostałbym przy niej.
Więc może jakoś w połączeniu z PHPem da się to uzyskać?
tvister
17.12.2012, 19:29:52
murek5
17.12.2012, 20:22:48
Troche nie to o co mi chodziło
wiiir
17.12.2012, 21:13:51
Troche ciezko napisac zapytanie jak nie wiem jak skladujesz dane.
Ale wystarczy zwykly count albo suma zalezy jak masz dane between albo >= i <= oraz grupowanie.
zaptanie zwaraca dni w ktorych jest jakas rezerwacja
SELECT DATA, count(DATA)
FROM rezerwacje
WHERE DATA >= pd_data
AND data<= pd_data
GROUP BY DATA
HAVING count(DATA) > 1
ORDER BY 1 ASC
mmmmmmm
17.12.2012, 21:44:08
1. zrob sobie tabenke, gdzie bedziesz mial liczby od 1 do (w pizdu). Nazwijmy ja liczby a pole lp.
2. SELECT * FROM liczby, tabelka WHERE liczby.lp<=DATEDIFF(EndTime, StartTime)