2005-05-28 00:35:05 Rabarbar napisał:
> Wiem ze to jest forum linuxowe ale mam problem ze znalezieniem odpowiednika dla tematu
> mysql\\'a.Wiec mam dwie prosby:
> 1.Jesli ktos zna linka do dobrego forum na temat MySql\\'q to prosze podac.
dobrze jest śledzić jakąś grupe dyskusyjną np. pl.comp.bazy-danych
> 2.Jesli znasz odpowiedz na ponizszy probelm, rowniez prosze o pomoc

.
> A wiec tak.Mam Tabele o nazwie rachunek:
> ----------------------------------------------------------
> Data | Papier | Ilosc | Wartosc |Gotowka
> ---------------------------------------------------------
> 2005-05-25 | comp | 226 | 26500 | 77.34
> ----------------------------------------------------------
> 2005-05-25 | tpsa | 485 | 9200 | NULL
> ----------------------------------------------------------
> 2005-05-27 | comp | 226 | 28000 | 3.45
> ----------------------------------------------------------
> 2005-05-27 | elektrim| 950 | 5200 | NULL
> ----------------------------------------------------------
>
> I teraz chce wyliczyc roznice pomiedzy wartoscia akcji+gotowki na koncie pomiedzy dniem
> 2005-05-25 a 2005-05-27.
> Jesli licze sume dla jednego dnia to wszystko jest ok a robie to tak:
> select sum(Wartosc)+Gotowka from rachunek where data = \\'2005-05-25\\'; - dzieki czemu zostaje
> wyswietlony poprawny wynik.
> Wydawalo mi sie ze jesli uzyje ponizszego zapytania:
> select sum(Wartosc)+Gotowka from rachunek where Data=\\'2005-05-25\\' - select sum(Wartosc)+Gotowka
> from rachunek where Data=\\'2005-05-27\\';
> bedzie ok ale niestety nie dziala :/
> Ktos pomoze?
Myslę, że można wykonać to na dwa sposoby:
1. Wykonać dwa oddzielne zapytania i odjąć jeden wynik od drugiego - ale wydaje się to trochę nieeleganckie.
2. Wykonać zapytanie zagnieżdżone:
MySQL od wersji 4.1 obsługuje zapytania zagnieżdżone, tzn. zapytanie w zapytaniu. Jeżeli zapytanie wewnętrzne zwróci poprawną wartość, to zostanie wykonane zapytanie zewnętrzne. Dla Ciebie będzie to rozwiązanie optymalne.
A teraz kod:
select sum(Wartosc)+Gotowka - (select sum(Wartosc)+Gotowka from rachunek where Data=\\'2005-05-27\\') from rachunek where data = \\'2005-05-25\\';
To powinno zadziałać. Pamiętaj jednak, że takie zapytania działają dużo wolniej niż normalne.
Zapytanie zagnieżdżone musi być ujęte w nawiasy!
Pozdrawiam
ps. Pisałem to z głowy, więc jak będą jeszcze jakieś problemy z tym zapytaniem - to pisz