Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Select z trzech tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
yeti9
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 ?

trueblue
A wiesz jak zbudować zapytanie bez tego warunku czy sam warunek sprawia Ci problem?
yeti9
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
kayman
  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)
yeti9
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
phpion
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()).
yeti9
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.