![]() |
![]() ![]() |
![]() |
![]() ![]()
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: 62 Pomógł: 4 Dołączył: 24.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
udostępni bazę gdzieś to jak będę miał chwile to ci napisze to zapytanie na sucho jest mi ciężko.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 177 Pomógł: 6 Dołączył: 14.01.2003 Skąd: Warszawa Ostrzeżenie: (10%) ![]() ![]() |
wrzuc creaty tabelek i napisz dokladnie co chcesz uzyskac. to nie jest select z typu select * from dual (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() ![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
http://www.parzol.ovh.org/baza.sql
Uzyskać chcę złączenie tabel które są many-to-many takich jak attraction, room_price czy type. Problem stanowi tu to że jeśli występują naraz to wyniki zwracana przez zapytanie są błędne. Na innym forum ktoś polecił mi takie coś:
Ale to też nie zwraca tego co chcę. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 5 Dołączył: 28.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czy chcesz aby zapytanie zwróciło pokoje w których występują a) dokładnie te atrakcje które podasz (nie mniej, nie więcej), B) te atrakcje które podasz i mogą być jeszcze jakieś, c) pokoje w których jest conajmniej jedna z podanych atrakcji?
-- edit baza jest dość mała, więc napisz jaki powinien być wg Ciebie poprawny rezultat. Ten post edytował szopen 31.08.2008, 20:05:07 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dokladnie odpowiedz "B" . Te atrakcje beda w wyszukiwarce (to jej element). Podaje jakies atrakcje (dowolna ilosc).
Tutaj przykladowo id=1 i id=9. W rezultacie mam otrzymac TYLKO pokoj o id=1. Nie moga byc zwrocone pokoje z tylko jedna atrakcja. Chodzi o TYLKO te pokoje ktore maja wszystkie podane atrakcje!! To podstawowy warunek. Pozdrawiam. Ten post edytował parzol 31.08.2008, 20:07:57 |
|
|
![]()
Post
#7
|
|
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 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki! Jesteś pierwszym któremu się udało, a dałem ten temat na wielu forach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pełen respekt mistrzu (IMG:http://forum.php.pl/style_emoticons/default/party.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 5 Dołączył: 28.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Podać numer konta? ;P
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 14:02 |