Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem SQL
Forum PHP.pl > Forum > Bazy danych > MySQL
krzesik
Witam mam problem z konstrukcją zapytania SQL.
mam poniższy zestaw zapytań generujący mi tabelkę z wynikami,
wszystko jest dobrze z małym ale.... może zaistnieć taka sytuacja że w tabeli tab2 nie ma nazwiska które jest w tabeli xx wtedy jest pomijane, próbowałem na różne sposoby, FULL JOIN, RIGHT JOIN wszystko na nic. Znalazłem gdzieś podobny przypadek gdzie zastosowano dodatkowo UNION, ale u mnie znów klops....

  1. $ksiega=
  2. "SELECT ksiega.masa AS masa, ksiega.cena AS cena, ksiega.zwrot AS zwrot, ksiega.waluta AS waluta, ksiega.przeznaczenie AS przeznaczenie, ksiega.id_book AS id_book FROM ksiega
  3. UNION ALL SELECT
  4. ksiega.masa1 AS masa, ksiega.cena1 AS cena, ksiega.zwrot1 AS zwrot, ksiega.waluta1 AS waluta, ksiega.przeznaczenie1 AS przeznaczenie, ksiega.id_book AS id_book FROM ksiega
  5. UNION ALL SELECT
  6. ksiega.masa2 AS masa, ksiega.cena2 AS cena, ksiega.zwrot2 AS zwrot, ksiega.waluta2 AS waluta, ksiega.przeznaczenie2 AS przeznaczenie, ksiega.id_book AS id_book FROM ksiega";
  7.  
  8. $ksiegabook=
  9. "SELECT imie_nazwisko, masa, cena, przeznaczenie, zwrot,
  10. case when waluta='%' && przeznaczenie='mama' then ((cena*masa)-((cena*masa)*zwrot/100))
  11. when waluta='%' && przeznaczenie='siostra' then (-(cena*masa)*(zwrot/100))
  12. when waluta='zł' && przeznaczenie='mama' then ((cena*masa)-(zwrot))
  13. when waluta='zł' && przeznaczenie='siostra' then (-zwrot)
  14. else 0 end AS saldo
  15. FROM ($ksiega) AS tab1
  16. LEFT JOIN book ON tab1.id_book=book.id_book ";
  17.  
  18. $kasap=
  19. "SELECT imie_nazwisko, SUM(kwota) AS kwota from kasa GROUP BY imie_nazwisko";
  20.  
  21. $koniec=
  22. "SELECT tab2.imie_nazwisko AS kto, tab2.masa AS masa, (SUM(saldo)+COALESCE(xx.kwota,0)) AS saldo, SUM(kwota) AS kwota
  23. FROM ($ksiegabook) AS tab2
  24. LEFT JOIN ($kasap) xx ON tab2.imie_nazwisko=xx.imie_nazwisko GROUP BY tab2.imie_nazwisko";
  25.  
  26.  
  27.  
alegorn
uf, jaśniej poproszę.

poproszę o strukturę tabel, zapytania w SQL nie w phpie (n i e c z y t e l n e ! )
przykład zwrotu - jasny opis problemu.

j.


edit: korekta.
krzesik
Więc tak, mamy trzy tabele:
book, ksiega kasa (struktury poniżej),
muszę wyłowić dane z tabelki KSIEGA pokazujące mi wartości umówmy się (masa * cena) - zwrot i tak dla każdego imie_nazwisko, którego w tabeli KSIEGA nie ma, ale pobieram go z tabeli BOOK poprzez lewostronne połączenie i spełnienie warunku ksiega.id_book=book.id_book. Następnie dołączam tabelę KASA bo w niej są inne rozliczenia i znów to łączę do poprzedniego wyniku lewostronnie przy spełnionym warunku imie_nazwisko=imie_nazwisko , które muszę zsumować z poprzedniego działania i to mi działa ładnie i pięknie. Problem pojawił się gdy w tabeli KSIEGA nie ma zapisów dla danej osoby a w tabeli KASA są .....
może coś wypatrzysz czego ja nie widziałem do tej pory..

--
-- Struktura tabeli dla ksiega
--

CREATE TABLE ksiega (
id_ksiega int(10) NOT NULL auto_increment,
id_book varchar(10) NOT NULL,
nr_odst varchar(10) NOT NULL,
masa varchar(10) NOT NULL,
masa1 varchar(10) NOT NULL,
masa2 varchar(10) NOT NULL,
forma varchar(50) NOT NULL,
forma1 varchar(50) NOT NULL,
forma2 varchar(50) NOT NULL,
przeznaczenie varchar(50) NOT NULL,
przeznaczenie1 varchar(50) NOT NULL,
przeznaczenie2 varchar(50) NOT NULL,
cena text NOT NULL,
cena1 text NOT NULL,
cena2 text NOT NULL,
zwrot text NOT NULL,
zwrot1 text NOT NULL,
zwrot2 text NOT NULL,
waluta varchar(5) NOT NULL,
waluta1 varchar(5) NOT NULL,
waluta2 varchar(5) NOT NULL,
PRIMARY KEY (id_ksiega)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Struktura tabeli dla book
--

CREATE TABLE book (
id_book int(10) NOT NULL auto_increment,
imie_nazwisko varchar(50) collate utf8_polish_ci NOT NULL,
anulowano varchar(1) collate utf8_polish_ci NOT NULL default 'N',
info text collate utf8_polish_ci NOT NULL,
data_wpisu datetime NOT NULL,
PRIMARY KEY (id_book)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;


-- Struktura tabeli dla kasa
--

CREATE TABLE kasa (
id_kasa int(10) NOT NULL auto_increment,
imie_nazwisko varchar(50) character set utf8 collate utf8_polish_ci NOT NULL,
kwota decimal(10,2) NOT NULL,
opis text character set utf8 collate utf8_polish_ci NOT NULL,
data date NOT NULL,
rodzaj varchar(2) character set utf8 collate utf8_polish_ci NOT NULL,
nr_kasa varchar(10) character set utf8 collate utf8_polish_ci NOT NULL,
PRIMARY KEY (id_kasa)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.