![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Hej!
Mam następujące tabele: ROOM (id, name, property_id) ATTRACTION (id, name, icon) ROOM_PRICE (id, room_id, date_from, date_to, price) // wiele możliwych cenników dla pojedynczego pokoju! PROPERTY (id, name) PROPERTY_ATTRACTION(property_id, attraction_id) Chce wyświetlić wszystkie pokoje z dowolnymi atrakcjami (np ID=1 i ID=9) oraz wybrać cennik dla danego pokoju. Wszystko w jednym zapytaniu. Próbowałem poniższego zapytania:
Ale rezulatatem jest lista błędnych pokojów (nie tych o wskazanych dwóch atrakcjach). Jak zbudować tutaj poprawne zapytanie? Z góry dzięki za wszelką pomoc! |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 5 Dołączył: 28.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale dokładnie co? Po edicie już wiem ; )
A to działa tak jak trzeba? Kod SELECT r.id AS room_id, GROUP_CONCAT( DISTINCT CONCAT(a.name, '*', a.icon) ORDER BY a.name SEPARATOR '|') AS attractions, GROUP_CONCAT(DISTINCT CONCAT(rp.id, '*', rp.price) ORDER BY rp.id SEPARATOR '|') AS price_list FROM room r LEFT JOIN property p ON r.property_id=p.id LEFT JOIN property_attraction pa ON pa.property_id=p.id LEFT JOIN attraction a ON a.id=pa.attraction_id AND (a.is_active=1 OR a.is_active IS NULL) LEFT JOIN room_price rp ON rp.room_id=r.id WHERE pa.attraction_id IN(1,9) GROUP BY r.id HAVING count(distinct pa.attraction_id)>=2 -- albo = 2 jeśli (a) ORDER BY p.is_promoted DESC LIMIT 0, 50; Offtop: czemu przy BBCodach [ sql ] nie zachowuje wcięć? Czy może ja coś źle robię? Byłbym wdzięczny adminom za dodanie w CSSach pre dla bloków SQLowych... Ten post edytował szopen 31.08.2008, 20:22:19 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 10:28 |