Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Połączenie dwóch tabel i wyodrębnienie danych
zgRED
post
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:

  1. CREATE TABLE IF NOT EXISTS `produkty` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user_id` int(11) NOT NULL,
  4. `status` varchar(255) CHARACTER SET latin2 NOT NULL DEFAULT 'inactive',
  5. `koszt` decimal(10,1) NOT NULL DEFAULT '0.0',
  6. PRIMARY KEY (`id`))


Tabela faktury:

  1. CREATE TABLE IF NOT EXISTS `faktury` (
  2. `ad` int(255) NOT NULL AUTO_INCREMENT,
  3. `user_id` int(11) NOT NULL,
  4. `id` int(10) NOT NULL DEFAULT '0',
  5. `kwota` decimal(10,1) NOT NULL DEFAULT '0.0',
  6. PRIMARY KEY (`ad`))


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
webmaniak
post
Post #2





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

Ostrzeżenie: (0%)
-----


Czyli są warunki:
1) faktura.ad może być null
2) faktura.ad nie jest null ale wtedy id usera nie może być takie samo co id sprawdzającego
3) jeśli produkt został wcześniej dodany to ma nie być wyświetlany
Dobrze rozumiem?
Go to the top of the page
+Quote Post
zgRED
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.01.2007

Ostrzeżenie: (0%)
-----


Cytat(webmaniak @ 7.10.2013, 07:43:18 ) *
Czyli są warunki:
1) faktura.ad może być null
2) faktura.ad nie jest null ale wtedy id usera nie może być takie samo co id sprawdzającego
3) jeśli produkt został wcześniej dodany to ma nie być wyświetlany
Dobrze rozumiem?


Odnośnie warunków
Cytat
1) faktura.ad może być null
2) faktura.ad nie jest null ale wtedy id usera nie może być takie samo co id sprawdzającego
3) jeśli FAKTURA został wcześniej dodana PRZEZ USERA Z ID SPRAWDZAJĄCEGO to ma nie być wyświetlana
4) uzupełnienie do 3): jeśli FAKTURA (przypisana do jednego produktu), została wcześniej dodana PRZEZ USERA Z ID SPRAWDZAJĄCEGO i została dodana też przez USERA z innym ID (niestety np. warunek produkty.user_id` != '2' jest spełniony) również taki produkt nie powinien się wyświetlać


Obecnie nie mam pomysłu na warunek nr 4. To jest moim zdaniem problem nie do rozwiązania poprzez obecne zapytanie MySQL, z LEFT OUTER JOIN. Męczy mnie to strasznie.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 02:13