Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Złożone zapytanie do 3 tabel., ...w zaleznosci od tego czy istnieje wpis w 3 tabelce.
emjot27
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.06.2007

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


Witam ma dość (jak dla mnie) skomplikowane zapytanie. Mam następujące tabelki
dokumenty, kontrahenci i bufor. W tabelce dokumenty jest odwołanie do tabelki kontrahenci po id danego kontrahenta. Po za tym w tabelce dokumenty jest Boolenowskie pole bufor mówiące o tym czy dokument jest buforze czy też nie. Jeżeli jest w buforze, to w tabelce bufor jest odpowiedni zapis z odwołaniem do tabelki dokumenty z jego id. Dodatkowo, w bazie bufor jest pole status typu enum o wartościach 'nowy' lub 'edycja' lub 'wolny'.
Teraz jak zrobić zapytanie tak, aby wybrać z bazy dokumentów dane razem z danymi kontrahenta ale tylko te rekordy które nie są nowe czyli posiadają zapis w bazie bufor, z polem status!='nowy'
Próbowałem zrobić coś takiego, ale gdzieś pewnie robie błąd:

  1. "SELECT * FROM `dokumenty` AS d, `kontrahenci` AS k, `bufor` AS b WHERE d.kontr_wchodz = k.idkontrahenci AND d.numer_wchodz LIKE '%".$dok_nr1."%' AND d.data_wplyw_wchodz LIKE '%".$dok_dat1."%' AND d.data_nad_wchodz LIKE '%".$dok_dat2."%' AND k.nazwa_kontr LIKE '%".$dok_kontr."%' AND CASE WHEN (b.id_buf_dok = d.idwchodzaca AND d.bufor = 'tak' AND b.stan_buf_dok != 'nowy' ) THEN 'true' END"


Właśnie w tym CASE czuję największą szanse...ale czy tak można robić zapytanie... Nigdy nie stosowałem takiego zapytania, ale teraz czuje, że tylko to może mi pomóc, tylko nie bardzo wiem jak to razem wszystko ładnie połączyć.

Bardzo proszę o pomoc.
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
emjot27
post
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.06.2007

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


Dzięki.
Niestety kombinuje jak koń pod gorę, ale coś mi nie wychodzi, nie mogę za bardzo wyobrazić sobie JOINa w zastosowaniu w moim przypadku. Probowałem z różnymi przykładami występującymi na tym forum, ale nie mogę tego zgrać z moim. Czy mógłbyś mi chociaż zapisać jakiś "szkic" takiego zapytania. Czy to by było coś w tym stylu?
-----------------------------

Ok. Poradziłem sobie. Zrobiłem to tak:
  1. "SELECT * FROM dokumenty d LEFT JOIN `bufor` b ON d.iddok = b.id_buf_dok AND b.status!='nowy' AND b.status!='wolny', kontrahenci k WHERE d.kontr = k.idkontrahenci [...]"


Jednak nie działa tak jak powinno (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Wyświetlają się wszystkie dokumenty, które nie mają w ogóle wpisu w bazie bufor a powinny się wyświetlać równeż te, które mają w buforze status "edycja" (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Co zmienić, żeby zadziałało ?

Ten post edytował emjot27 19.12.2007, 12:48:10
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: 4.10.2025 - 21:44