Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Select z trzech tabel
yeti9
post
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
 
Start new topic
Odpowiedzi (1 - 6)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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
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 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
kayman
post
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
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
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
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
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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 22:56