![]() |
![]() |
![]()
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: 371 Pomógł: 30 Dołączył: 14.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Widze na to dwa sposoby:
1) przy tworzeniu faktury sprawdzasz czy faktura została wcześniej dodana wg tego co pisałeś w warunkach 3 i 4 - jeśli tak, to w utworzonej kolumnie, np. duplicated dajesz 1/true. Potem już z górki, sprawdzasz czy ta faktura ma true czy false w kolumnie duplicated 2) tworzysz dwa zapytania: w pierwszym sprawdzasz warunki 3 i 4, w drugim do warunku 1 i 2 dodajesz że nie mogą to być id z pierwszego zapytania. W taki sposób ja bym to zrobił(w podobnym module tak robiłem tylko tam dawałem takie zapytanie w nieco innym celu). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 11:01 |