Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z GROUP BY i HAVING
LBula
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.06.2011

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


Mamy tabelki:

1) hotels: ID, name
2) floors: hotels_ID_FK, floor_number
3) rooms: floors_ID_FK, space
4) addreses: hotels_ID_FK, city, street, house_number

Każdy z hoteli może mieć wiele pięter i wiele pokojów na każdym piętrze.
Każdy z hoteli może mieć też więcej niż jeden adres np. przy ulicy Kolejowej i Dworcowej jeśli leży na skrzyżowaniu ulic (nie jest to typowa interpretacja adresu).

  1. SELECT ID, name, sum(space) AS hotel_space FROM hotels AS h
  2. JOIN addreses AS a ON (a.hotels_ID_FK = h.ID)
  3. JOIN floors AS f ON (f.hotels_ID_FK = h.ID)
  4. JOIN rooms AS r ON (r.floors_ID_FK = f.ID)
  5. WHERE a.city LIKE 'Sopot' AND a.street LIKE 'Dworcowa'
  6. GROUP BY h.ID
  7. HAVING hotel_space > 100;


Zapytanie powinno zwracać listę hoteli w Sopocie przy ulicy Dworcowej i sumę powierzchni pokojów w każdym z hoteli.
Jeśli suma powierzchni pokoi w hotelu jest mniejsza od 100 m hotel nie powinien znaleźć się w wynikach wyszukiwania.
Problem pojawia się, gdy hotel ma więcej niż jeden adres - w takim przypadku suma jest zawyżona i co za tym idzie konstrukcja HAVING działa nie poprawnie.

Jak poprawić zapytanie aby grupowanie w każdym przypadku działało poprawnie?

I kolejne pytanie:

Jeśli do powyższego zapytania dodamy warunki

  1. WHERE f.floor_number > 3 AND f.floor_number < 10


(interesują nas tylko hotele o powierzchni powyżej 100 m zlokalizowanej pomiędzy piętrami 3 i 10)
w jaki sposób wybrać tylko te hotele w przypadku których powierzchnia znajduje się tylko na piętrach sąsiadujących tzn. np.

piętro 4: 50 m
piętro 5: 25 m
piętro 6: 26 m

a nie:

piętro 4: 50 m
piętro 7: 60 m

?
Go to the top of the page
+Quote Post
uupah5
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

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


Cytat(LBula @ 19.06.2011, 17:32:49 ) *
Jak poprawić zapytanie aby grupowanie w każdym przypadku działało poprawnie?

subquery zwracające id hoteli wg zadanych warunków na adres
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 - 06:03