![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 14.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chciałbym Was prosić o pomoc z zapytaniem. Mam bazę o mniej więcej takiej strukturze relacji: OWNER * - * CAR Dane wejściowe to zbiór id'ków samochodów. Zapytanie ma pobierać tych właścicieli, którzy posiadają każdy ( ![]() Czyli np. - właściciel WA posiada samochody CA i CB, a WB posiada tylko CA - wywołanie zapytania pobierzWłaścicieli( array(CA.id, CB.id) ) musi dać w wyniku tylko WA - nie można więc użyć struktury WHERE id IN , po w wyniku dostalibyśmy też WB (a przynajmniej ja nie wiem jakby się miała ona przydać) Ten post edytował barry853 6.02.2011, 12:17:34 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 87 Pomógł: 12 Dołączył: 31.05.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Zakładając że masz takie tabele:
Z takimi danymi wejściowymi:
To twoje zadanie rozwiąże funkcja:
Wywołanie funkcji:
W tabeli posiadanie masz przypisania właściciel -> samochód. Funkcja pobiera dane wejściowe w postaci tablicy, sprawdza ilość podanych "samochodów", składa identyfikatory w tablicę którą może zczytać sql. Generalnie cały problem rozwiązuje warunek having. Pozdrawiam. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 14.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
@trafas
Dzięki wielkie! Powiem tak - jak przeczytałem Twoje rozwiązanie, to pomyślałem - aha, błąd kolego, bo przecież jak dodam właściciela WC i samochód CC, gdzie właściciel WC ma samochody CB i CC to mi zwróci zły wynik Czyli: - WA - (CA), - WB - (CA, CB), - WC - (CB,CC) ) sądziłem że zapytanie dla CA CB zwróci mi właścicieli WB i WC, po warunek HAVING będzie się zgadzał a WHERE IN nie pomoże. Z HAVING też próbowałem wcześnie, ALE ! - zacząłem pisać Twojego SQL'a u siebie żeby to udowodnić. Ja stosuję ORM Doctrine, a tam się raczej zapomina o tabelach asocjacyjnych i zapytaniach na nich. Widać skrzywienie i przez to później problem z SQL'em zwykłym ![]() Czułem, że to jest jakiś banał, ale za nic nie mogłem skojarzyć tego prostego rozwiązania, dzięki ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:59 |