Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Select z trzech tabel
yeti9
post 10.06.2016, 11:00:52
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.06.2016

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


Dzień dobry wszystkim Forumowiczom,

Tworzę małą bazę danych obiektów turystycznych i utknąłem ta zapytaniu wyszukującym obiekty spełniające określone wymagania.

W bazie mam następujące tabele:

Obiekty z polami: obiekt_id, obiekt_nazwa
Udogodnienia z polami: udog_id, udog_nazwa
i łącząca je tabela: Udog_obiekt: udogo_id, udog_id, obiekt_id

Każdy obiekt może posiadać wiele udogodnień i nie bardzo wiem w jaki sposób zbudować selecta który wyświetli mi wszystkie obiekty spełniające warunek np. udog_id = 2 AND udog_id=4 AND udog_id = 10 ?

Go to the top of the page
+Quote Post
trueblue
post 10.06.2016, 11:16:27
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A wiesz jak zbudować zapytanie bez tego warunku czy sam warunek sprawia Ci problem?


--------------------
Go to the top of the page
+Quote Post
yeti9
post 10.06.2016, 11:33:42
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.06.2016

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


Zbudowałem coś takiego:
  1. SELECT Obiekty.nazwa, udogodnienia.udog_nazwa FROM `udog_obiekt`
  2. LEFT JOIN Obiekty ON udog_obiekt.obiekt_id = Obiekty.obiekt_id
  3. LEFT JOIN udogodnienia ON udog_obiekt.udog_id = udogodnienia.udog_id
  4. WHERE udogodnienia.udog_id = 2


i działa dla pojedynczego "udogodnienia" ale jak chciałbym więcej udogodnień to już niestety nie sad.gif
Go to the top of the page
+Quote Post
kayman
post 10.06.2016, 11:42:32
Post #4





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


  1. SELECT Obiekty.nazwa, udogodnienia.udog_nazwa FROM `udog_obiekt`
  2. LEFT JOIN Obiekty ON udog_obiekt.obiekt_id = Obiekty.obiekt_id
  3. LEFT JOIN udogodnienia ON udog_obiekt.udog_id = udogodnienia.udog_id
  4. WHERE udogodnienia.udog_id IN(2,4,10)
Go to the top of the page
+Quote Post
yeti9
post 10.06.2016, 14:05:37
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.06.2016

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


Cytat(kayman @ 10.06.2016, 12:42:32 ) *
  1. SELECT Obiekty.nazwa, udogodnienia.udog_nazwa FROM `udog_obiekt`
  2. LEFT JOIN Obiekty ON udog_obiekt.obiekt_id = Obiekty.obiekt_id
  3. LEFT JOIN udogodnienia ON udog_obiekt.udog_id = udogodnienia.udog_id
  4. WHERE udogodnienia.udog_id IN(2,4,10)


dzięki, ale niestety wyniki są błędne więc to nie to
Go to the top of the page
+Quote Post
phpion
post 10.06.2016, 14:10:19
Post #6





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Zakładam, że chcesz w efekcie otrzymać te obiekty, które mają wszystkie 3 udogodnienia. To co napisał kayman zwróci natomiast te, które mają którekolwiek z nich. Spróbuj zatem dołożyć do tego na końcu:
  1. ... GROUP BY Obiekty.obiekt_id HAVING COUNT(*) = 3

gdzie 3 to ilość wybranych przez Ciebie udogodnień (czyli to, co wstawiasz do IN()).
Go to the top of the page
+Quote Post
yeti9
post 10.06.2016, 14:32:54
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.06.2016

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


Cytat(phpion @ 10.06.2016, 15:10:19 ) *
Zakładam, że chcesz w efekcie otrzymać te obiekty, które mają wszystkie 3 udogodnienia. To co napisał kayman zwróci natomiast te, które mają którekolwiek z nich. Spróbuj zatem dołożyć do tego na końcu:
  1. ... GROUP BY Obiekty.obiekt_id HAVING COUNT(*) = 3

gdzie 3 to ilość wybranych przez Ciebie udogodnień (czyli to, co wstawiasz do IN()).


dziękuję! teraz działa prawidłowo smile.gif
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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 05:59