![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 7 Dołączył: 6.01.2010 Skąd: Opole Lubelskie Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę product_user zawierającą product_id i user_id (relacja m do n).
Klient chce filtrowanie użytkowników po produktach. Jeżeli z selecta wybierze 2 produkty to na liście mają mu się pokazać tylko użytkownicy posiadający 2 produkty równocześnie. Jak napisać do tego zapytanie? Z OR nie byłoby problemu, ale z AND nie mam pomysłu... Ten post edytował lukasz91 6.08.2015, 11:29:52 -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Musisz dac tyle LEFT JOIN na tabele product_user ile koles wybral produktow a potem w where dajesz warunek ze obie tabele mają miec product_id <> null i po sprawie
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
SELECT user_id FROM product_user WHERE product_id in (id1,id2,id3,id4,...) GROUP BY user_id HAVING Count(DISTINCT product_id)=ILOSC_ID_Z_IN
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Można i tak
![]() Swoją drogą ciekawe jak z wydajnością obu rozwiązań względem siebie. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 7 Dołączył: 6.01.2010 Skąd: Opole Lubelskie Ostrzeżenie: (0%) ![]() ![]() |
Działa sposób zaproponowany przez @mmmmmmm. Dzięki wam za pomoc
![]() -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ba, moj tez dziala, ino ze ja nie dalem kodu
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 7 Dołączył: 6.01.2010 Skąd: Opole Lubelskie Ostrzeżenie: (0%) ![]() ![]() |
Ba, moj tez dziala, ino ze ja nie dalem kodu ![]() Nie sprawdzałem. Zapytanie od @mmmmmm jest prostsze w zapisie. Klient nie posiada wielu produktów, a więc duża optymalizacja nie jest potrzebna ![]() -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Zgadza sie, jest prostsze w zapisie, chcoć w cale nie az tak duzo.
Co to optumalizacji jak kiedys bede mial czas i nie zapomne to z czystej ciekawosci porownam oba rozwiązania. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 22 Dołączył: 17.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Kiedyś testowałem, nie odnotowałem dużej różnicy w zastosowaniu IN vs Left Join - jednak każde zapytanie jest inne.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 7 Dołączył: 6.01.2010 Skąd: Opole Lubelskie Ostrzeżenie: (0%) ![]() ![]() |
Odkopuję temat, ponieważ klient chce jeszcze to zmodyfikować. Może opiszę na przykładzie:
User 1 ma produkty A I B User 2 ma produkt A Przy filtrowaniu admin wybiera produkt A. Na liście wyników ma mu pokazać tylko Usera 2. User 1 ma nie pokazać się, ponieważ ma dodatkowo produkt B. Na liście ma pokazywać tylko tych użytkowników, co mają dokładnie takie produkty jak wybrane z listy filtrowania. Mój sql wygląda teraz tak:
ale kod nie działa tak jak trzeba. Jak go poprawić? -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 07:11 |