ďťż
 
problem z zapytaniem - postgresql ďťż
 
problem z zapytaniem - postgresql
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • bajkomoda.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com