problem z zapytaniem - postgresql
xbeko - 08-09-2007 00:05
problem z zapytaniem - postgresql
witam, jestem raczej poczatkujacy jesli chodzi o bazy danych. mam problem ze zbudowaniem odpowiedniego zapytania. prosilbym o pomoc, wskazowke, czy w ogole mozliwe jest zbudowanie zapytania zeby wykonywalo sie szybciej. ponizej szczegoly:
mam 3 tabele: kursy, szkoly, uczniowie
zapytanie wyglada tak: SELECT k.*, o.login, o.info FROM kursy k, osrodki o WHERE k.nr_szkoly=o.id_szkoly AND k.status=0 ORDER BY k.data_rozpoczecia LIMIT 50 OFFSET 0 ;
wyrzucam sobie dane w while'u ale potrzebuje takze wyrzucic ilosc uczniow w danym kursie oraz uczniow w danym kursie ktorzy zostali skierowani z innej placowki. na chwile obecna tworze w tym while'u dodatkowe 2 selecty, ktory mi to wyrzucaja.
SELECT COUNT(*) AS ile FROM uczniowie WHERE nr_kursu=[ TUTAJ ID KURSU POBRANY Z TABELI KURSY Z POWYZSZEGO ZAPYTANIA ] ;
SELECT COUNT(*) AS ile FROM uczniowie WHERE skad_skierowany=1 AND nr_kursu=[ TUTAJ ID KURSU POBRANY Z TABELI KURSY Z POWYZSZEGO ZAPYTANIA ] ;
czyli dodatkowe X zapytan select :/ czy da sie te 2 zapytania przeniesc do tego wyzej?
z gory dzieki za pomoc. Jacek
hubert depesz lubaczewski - 08-09-2007 00:05
Dnia 07.09.2007 xbeko <xbeko@NOspamgazeta.pl> napisał/a: > mam 3 tabele: > kursy, szkoly, uczniowie > zapytanie wyglada tak: > SELECT k.*, o.login, o.info > FROM kursy k, osrodki o > WHERE k.nr_szkoly=o.id_szkoly AND k.status=0 > ORDER BY k.data_rozpoczecia > LIMIT 50 > OFFSET 0 > ; > wyrzucam sobie dane w while'u ale potrzebuje takze wyrzucic ilosc uczniow w > danym kursie oraz uczniow w danym kursie ktorzy zostali skierowani z innej > placowki. > na chwile obecna tworze w tym while'u dodatkowe 2 selecty, ktory mi to > wyrzucaja. > > SELECT COUNT(*) AS ile > FROM uczniowie > WHERE nr_kursu=[ TUTAJ ID KURSU POBRANY Z TABELI KURSY Z POWYZSZEGO > ZAPYTANIA ] ; > > SELECT COUNT(*) AS ile > FROM uczniowie > WHERE > skad_skierowany=1 AND > nr_kursu=[ TUTAJ ID KURSU POBRANY Z TABELI KURSY Z POWYZSZEGO > ZAPYTANIA ] ; >
select k.*, o.login, o.info, i.ile, i.ile1 from kursy k join osrodki o on k.nr_szkoly = o.id_szkoly join ( select u.nr_kursu, count(*) as ile, count( ( case when u.skad_skierowany = 1 then 1 else null end )) as ile1 from uczniowie u group by u.nr_kursu ) i on k.id_kursu = i.nr_kursu where k.status = 0 order by k.data_rozpoczecia limit 50 offset 0 ;
powinno zadziałać.
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
xbeko - 08-09-2007 00:05
Użytkownik "hubert depesz lubaczewski" <depesz@depesz.com> napisał w wiadomości news:e6v7r4-db7.ln1@depesz.com... > Dnia 07.09.2007 xbeko <xbeko@NOspamgazeta.pl> napisał/a: >> mam 3 tabele: >> kursy, szkoly, uczniowie >> zapytanie wyglada tak: >> SELECT k.*, o.login, o.info >> FROM kursy k, osrodki o >> WHERE k.nr_szkoly=o.id_szkoly AND k.status=0 >> ORDER BY k.data_rozpoczecia >> LIMIT 50 >> OFFSET 0 >> ; >> wyrzucam sobie dane w while'u ale potrzebuje takze wyrzucic ilosc uczniow >> w >> danym kursie oraz uczniow w danym kursie ktorzy zostali skierowani z >> innej >> placowki. >> na chwile obecna tworze w tym while'u dodatkowe 2 selecty, ktory mi to >> wyrzucaja. >> >> SELECT COUNT(*) AS ile >> FROM uczniowie >> WHERE nr_kursu=[ TUTAJ ID KURSU POBRANY Z TABELI KURSY Z POWYZSZEGO >> ZAPYTANIA ] ; >> >> SELECT COUNT(*) AS ile >> FROM uczniowie >> WHERE >> skad_skierowany=1 AND >> nr_kursu=[ TUTAJ ID KURSU POBRANY Z TABELI KURSY Z POWYZSZEGO >> ZAPYTANIA ] ; >> > > select > k.*, > o.login, > o.info, > i.ile, > i.ile1 > from > kursy k > join osrodki o on k.nr_szkoly = o.id_szkoly > join ( > select > u.nr_kursu, > count(*) as ile, > count( ( case when u.skad_skierowany = 1 then 1 else null > end )) as ile1 > from > uczniowie u > group by > u.nr_kursu > ) i on k.id_kursu = i.nr_kursu > where > k.status = 0 > order by > k.data_rozpoczecia > limit 50 offset 0 > ; > > powinno zadziałać. > > depesz
dzieki wielkie, dziala :) no i przyspieszylo znacznie.
Jacek
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
[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?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
zanotowane.pldoc.pisz.plpdf.pisz.plbajkomoda.xlx.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 |
|