![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 14.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam problem z wyodrębnieniem danych na podstawie zapytania łączącego dwie tabele. W uproszczeniu wyglądają one następująco: Tabela produkty:
Tabela faktury:
Chciałbym w efekcie uzyskać taki efekt: dane będą pobierane dla danego użytkownika z np. user_id=2. Wyświetlać mają się więc wszyskie produkty, poza produktami dodanym przez użytkownika sprawdzającego (WHERE produkty.user_id NOT LIKE '2'), o koszcie większym od 10000 (AND produkty.koszt>10000), o statusie aktywnym (AND produkty.status='active') - lecz tylko te produkty dla których sprawdzający użytkownik nie wystawił jeszcze faktur (wyświetlić tylko te rekordy dla których nie istnieją wpisy w tabeli faktury odpowiadające danym produktom (faktury.id) i użytkownikowi sprawdzającemu (faktury.user_id)). Problem mój polega na tym, iż nie potrafię zdefiniować ostatniej część zapytania. Tabele złączyłem poprzez LEFT OUTER JOIN faktury ON produkty.id=faktury.id Nie potrafię jednak trafnie wykorzystać np. składni WHERE NOT EXISTS aby wyfiltrować produkty bez faktur. Liczyłbym na Waszą pomoc jeśli uda Wam się zrozumieć co mam w zamyśle - choć starałem się opisać to dość precyzyjnie (IMG:style_emoticons/default/wink.gif) Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 14.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
No niestety nie daje to do końca efektu jaki chciałbym uzyskać. Kod:
pozwala co prawda na wybranie takich produktów dla których nie ma odpowiadających im wpisom w tabeli faktury. Natomiast nie uwzględnia to sytuacji, gdy dla danego produktu (produkty.id) wpis w tabli faktury istnieje, jednak jest on przypisany innemu użytkownikowi niż użytkownik sprawdzany (faktury.user_id). Tutaj nie mam pomysłów jak to uwzględnić. Efekt jaki chciałbym uzyskać postaram się opisać bardziej precyzyjnie. Tabela produkty uzupełniona będzie w ten sposób: Cytat id user_id status koszt 1 2 active 15000 2 2 active 12000 3 5 active 11000 4 6 active 16000 5 6 active 12000 6 3 active 11000 Tabela faktury uzupełniona będzie w ten sposób: Cytat ad user_id id kwota 1 2 3 11000 2 2 5 12000 3 6 1 15000 Przykład 1. Gdy sprawdza dane uzytkownik nr 2 (user_id=2) to ma w efekcie wyświetlić mają się następujące produkty: Cytat id user_id status koszt 4 6 active 16000 6 3 active 11000 Nie wyświetlane są więc produkty 1,2,3 ponieważ zostały dodane przez użytkownika nr 2 (WHERE produkty.user_id != '2'). Nie wyświetlają się produkty 3,5 ponieważ już użytkownik dodał do nich fakturę i wpis taki istnieje w tabeli faktury. Wyświetlają się więc tylko produkty 4 i 6 których nie dodał użytkownik nr 2 i które nie znajdują się w tabeli faktury z jego user_id=2. Przykład 2. Gdy sprawdza dane uzytkownik nr 6 (user_id=6) to ma w efekcie wyświetlić mają się następujące produkty: Cytat id user_id status koszt 2 2 active 12000 3 5 active 11000 6 3 active 11000 Nie wyświetlane są więc produkty 4,5 ponieważ zostały dodane przez użytkownika nr 6 (WHERE produkty.user_id != '6'). Nie wyświetla się produkt 1 ponieważ już użytkownik dodał do niego fakturę i wpis taki istnieje w tabeli faktury. Wyświetlają się więc tylko produkty 2,3,6 których nie dodał użytkownik nr 6 i które nie znajdują się w tabeli faktury z jego user_id=6. Ten problem męczy mnie już od kilku dni, pewnie istnieje jakieś banalne rozwiązanie ale ja zupełnie nie wiem jak to ugryźć. Może ktoś wpadnie na pomysł. User_id użytkownika który dokonuje sprawdzenia jest dostarczane przez $_GET[user_id] Ten post edytował zgRED 6.10.2013, 12:57:40 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 04:19 |