MySQL - kwerenda krzyzowa lub grupowanie na dwoch poziomach
Sinuhe - 13-11-2006 00:47
MySQL - kwerenda krzyzowa lub grupowanie na dwoch poziomach
Witam,
mam strukture bazy jak na zalaczonym obrazku:
http://tinyurl.com/ygxt5t
Teraz chce zrobic kwerende grupujaca na poziomie id_wystepu zawierajaca trzy kolumny: wolne miejsca, zarezerwowane i sprzedane. Wolne miejsca to pole tabeli sektory - wiec trzeba posumowac po wszystkich sektorach w ramach wystepu. Natomiast zarezerwowane i sprzedane to suma po zamowieniach w zaleznosci od wartosci pola status.
Ta kwerenda wyglada mniej wiecej tak: SELECT id_wystepu, SUM(wolne_miejsca) as wolne_miejsca SUM(IF(status<=2, ilosc_zamowionych_miejsc, 0)) as zarezerwowane, SUM(IF(status=3, ilosc_zamowionych_miejsc, 0)) as sprzedane FROM wystepy w, sektory s, zamowienia z WHERE s.id_wystepu=w.id_wystepu AND s.id_sektora=z.id_sektora GROUP BY 1 LIMIT $first, $count
Kwerenda oczywiscie dziala, i oczywiscie liczy mi wielokrotnie pole wolne_miejsca... Nie wiem jak poprawic powyzsza kwerende, bede wdzieczny za sugestie :) Oczywiscie bede musial porobic zlaczenia zewnetrzne, ale to dopiero jak sobie poradze z tym problemem.
dzieki,pozdr, s.
Michał 'Khorne' Rzechonek - 13-11-2006 00:48
Sinuhe wrote: > Teraz chce zrobic kwerende
Boże jak ja nienawidzę tego "tłumaczenia". "Query" to jest "zapytanie" a nie jakieś %$#!!@ kalki...
-- Michał 'Khorne' Rzechonek
Grzegorz Danowski - 13-11-2006 00:48
Użytkownik "Michał 'Khorne' Rzechonek" <khornik@gmail.com> napisał w wiadomości news:1162820147.258709.153800@e3g2000cwe.googlegro ups.com... <cite> > Teraz chce zrobic kwerende
Boże jak ja nienawidzę tego "tłumaczenia". "Query" to jest "zapytanie" a nie jakieś %$#!!@ kalki...
</cite>
A kto wg Ciebie jest autorem tej kalki językowej? Jeśli myślisz, że pojawiła się ona dopiero w epoce komputerów, to zajrzyj do swojego słownika wyrazów obcych, a znajdziesz tam np. kwerendę biblioteczna. Pozdrawiam Grzegorz
Sinuhe - 13-11-2006 00:48
Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał : > Użytkownik "Michał 'Khorne' Rzechonek" <khornik@gmail.com> napisał w > wiadomości news:1162820147.258709.153800@e3g2000cwe.googlegro ups.com... > <cite> >> Teraz chce zrobic kwerende > > Boże jak ja nienawidzę tego "tłumaczenia". "Query" to jest > "zapytanie" > a nie jakieś %$#!!@ kalki... > > </cite> > > A kto wg Ciebie jest autorem tej kalki językowej? Jeśli myślisz, że > pojawiła się ona dopiero w epoce komputerów, to zajrzyj do swojego > słownika wyrazów obcych, a znajdziesz tam np. kwerendę biblioteczna. > Pozdrawiam > Grzegorz
Jezeli juz OT, to pozwole sobie na cytat ze Slownika Jezyka Polskiego:
"kwerenda a.. 1. <poszukiwanie potrzebnej informacji w aktach, archiwach, bibliotekach itp.> 2. daw. <poszukiwanie kogoś lub czegoś> 3. daw. <śledztwo w jakiejś sprawie> . kwerendować"
Oczywiscie w uzyciu ze wzgledu na lokalizacje accessa, ale mnie tam sie podoba, bardziej niz "zapytanie" (ktore swoja droga bardziej blizej ma do "inquiry" niz "query" IMHO :)
Ale moze jednak ktos podpowie jak zrobic takie grupowanie w dwoch krokach? ;)
pozdr, s.
Grzegorz Danowski - 13-11-2006 00:48
Użytkownik "Sinuhe" <sinuhe22@wp.pl> napisał w wiadomości news:eikmv8$5jt$1@nemesis.news.tpi.pl... > Witam, > > mam strukture bazy jak na zalaczonym obrazku: > > http://tinyurl.com/ygxt5t > > Teraz chce zrobic kwerende grupujaca na poziomie id_wystepu zawierajaca > trzy kolumny: wolne miejsca, zarezerwowane i sprzedane. Wolne miejsca to > pole tabeli sektory - wiec trzeba posumowac po wszystkich sektorach w > ramach wystepu. Natomiast zarezerwowane i sprzedane to suma po > zamowieniach w zaleznosci od wartosci pola status. > > Ta kwerenda wyglada mniej wiecej tak: > SELECT id_wystepu, > SUM(wolne_miejsca) as wolne_miejsca > SUM(IF(status<=2, ilosc_zamowionych_miejsc, 0)) as > zarezerwowane, > SUM(IF(status=3, ilosc_zamowionych_miejsc, 0)) as sprzedane > FROM wystepy w, sektory s, zamowienia z > WHERE s.id_wystepu=w.id_wystepu > AND s.id_sektora=z.id_sektora > GROUP BY 1 > LIMIT $first, $count > > Kwerenda oczywiscie dziala, i oczywiscie liczy mi wielokrotnie pole > wolne_miejsca... Nie wiem jak poprawic powyzsza kwerende, bede wdzieczny > za sugestie :) Oczywiscie bede musial porobic zlaczenia zewnetrzne, ale to > dopiero jak sobie poradze z tym problemem. >
Nie napisałeś jaką wersją MySQL dysponujesz, ale jeśli można w niej używać podzapytań to spróbuj:
Select id_wystepu, Sum(S.wolne_miejsca) As wolne_miejsca, Sum(Z.zarezerwowane) As zarezerwowane, Sum(Z.sprzedane) As sprzedane From sektory As S Inner Join (Select id_zamowienia, SUM(IF(status<=2, ilosc_zamowionych_miejsc, 0)) as zarezerwowane, SUM(IF(status=3, ilosc_zamowionych_miejsc, 0)) as sprzedane From zamowienia Group By id_zamowienia) As Z On S.id_zamowienia = Z.id_zamowienia Group By S.id_wystepu Limit $first, $count
Pozdrawiam Grzegorz
Sinuhe - 13-11-2006 00:48
Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w wiadomości news:eiocgf$77r$1@inews.gazeta.pl... > Nie napisałeś jaką wersją MySQL dysponujesz, ale jeśli można w niej używać > podzapytań to spróbuj: > (...) Pozdrawiam > Grzegorz >
MySQL 4.1.21, wiec teoretycznie podzapytania obsluguje
po poludniu sprobuje zastosowac podana propozycje, ale mam jeszcze pytanie: czy cos takiego jest w ogole mozliwe bez podzapytan? myslalem o samych IF-ach, cos na zasadzie opisanej w tym artykule:
http://tinyurl.com/y8mcy4
dziekuje i pozdrawiam, s.
Grzegorz Danowski - 13-11-2006 00:48
Użytkownik "Sinuhe" <sinuhe22@wp.pl> napisał w wiadomości news:eipb0l$bmc$1@nemesis.news.tpi.pl... > Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał > w wiadomości news:eiocgf$77r$1@inews.gazeta.pl... >> Nie napisałeś jaką wersją MySQL dysponujesz, ale jeśli można w niej >> używać podzapytań to spróbuj: > > MySQL 4.1.21, wiec teoretycznie podzapytania obsluguje > > po poludniu sprobuje zastosowac podana propozycje, ale mam jeszcze > pytanie: czy cos takiego jest w ogole mozliwe bez podzapytan? myslalem o > samych IF-ach, cos na zasadzie opisanej w tym artykule: > > http://tinyurl.com/y8mcy4
Jakoś nie widzę związku tego czego potrzebujesz z zapodanym przez Ciebie artykułem. Grzegorz
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.pllisinski.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|