ďťż
 
Jak najwydajniej =?ISO-8859-2?Q?skonstruowa=E6_selecta=3F?= ďťż
 
Jak najwydajniej =?ISO-8859-2?Q?skonstruowa=E6_selecta=3F?=
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

Jak najwydajniej =?ISO-8859-2?Q?skonstruowa=E6_selecta=3F?=



Johnny - 08-03-2007 00:02
Jak najwydajniej =?ISO-8859-2?Q?skonstruowa=E6_selecta=3F?=
  Istnieje dajmy na to tabela osoby o polach: id, od, do, nazwisko oraz
tabela wypożyczenie o polach: od, do, id_osoby, id_przedmiotu.

W tabeli wypożyczenie jest zapis:
2007-02-01, 2007-02-28, 1, 123
w tabeli osoby są dwa rekordy (odnoszą się do tej samej osoby):
2007-01-01,2007-02-03, 1, Kowalska
2007-02-04,9999-12-31, 1, Kowalska-Nowa
i teraz chodzi o to by zrobić selecta, który zwróci rekordy wypożyczeń o
strukturze:
nazwisko,id_przemiotu z okresu od 2007-02-01 do 2007-02-28 i by w
przypadku, gdy złączenie zwróci dwa rekordy osoby, pojawiły siędane
najbardziej aktualne, czyli:
Kowalska-Nowak,123

Jak to najwydajniej napisać? Oczywiście rozwiązania typu top 1 +
odpowiednie sortowanie odpada ponieważ przykład jest uproszczony, a
rzeczywista tabela osób może zawierać wiele tego typu rekordów.

--
Pozdrawiam
Johnny

"Zauważyłem że ci wszyscy, którzy opowiadają się za aborcją, zdążyli się
urodzić". R. Reagan





Borafu - 08-03-2007 00:02

  Johnny napisał(a):
> Istnieje dajmy na to tabela osoby o polach: id, od, do, nazwisko oraz
> tabela wypożyczenie o polach: od, do, id_osoby, id_przedmiotu.
Tu masz "od", tam masz "od", tu masz "do", tam masz "do"...
Czym się różni jedno "do" od drugiego "do"?

> Jak to najwydajniej napisać?
Zacznij od tego jaka to baza.

Pozdro
--
Borafu




Johnny - 08-03-2007 00:02

  Borafu napisał(a):
> Johnny napisał(a):
>> Istnieje dajmy na to tabela osoby o polach: id, od, do, nazwisko oraz
>> tabela wypożyczenie o polach: od, do, id_osoby, id_przedmiotu.
> Tu masz "od", tam masz "od", tu masz "do", tam masz "do"...
> Czym się różni jedno "do" od drugiego "do"?
>
>> Jak to najwydajniej napisać?
> Zacznij od tego jaka to baza.
>
> Pozdro

MS SQL; struktura jest mi dana i nie mogę jej zmienić. Od, do w tabeli
osoby określa zakres obowiązywania danych personalnych, które mogąsię
zmienić (ślub, zmiana miejsca zamieszkania, itp.) Od, do w tabeli
wypożyczenia określa okres wypożyczenia czegoś.

Oczywiście jest to przykład obrazujący jedynie mój rzeczywisty problem.

--
Pozdrawiam
Johnny

"Zauważyłem że ci wszyscy, którzy opowiadają się za aborcją, zdążyli się
urodzić". R. Reagan




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 08-03-2007 00:02

  Johnny wrote:
> struktura jest mi dana i nie mogę jej zmienić.
[...]
> Oczywiście jest to przykład obrazujący jedynie mój rzeczywisty problem.

Krótko mówiąc pytasz o poradę w sprawie innego problemu, a w dodatku
z góry wykluczasz prawdopodobnie najlepsze rozwiązanie tego innego problemu
(polegające na dodaniu flagi aktualne/nieaktualne, jak to się zwykle robi
dla danych o określonym czasie ważności). To co właściwie chcesz osiągnąć
tym pytaniem? Gdybyś pytał jak w ogóle to zrobić, to jeszcze ok, ale
odpowiedź na pytanie "jak to zrobić najwydajniej" może zależeć od wielu
czynników, których nie podałeś opisując ten "analogiczny" problem...

--
Michał Kuratczyk





Bartek Dajewski - 08-03-2007 00:02
=?iso-8859-2?Q?Re:_Jak_najwydajniej_skonstruowa=E6_selecta=3F ?=
  Cześć.

Użytkownik "Johnny" <johnny_bez_spamu_@klub.chip.pl> napisał w wiadomości
news:esmjil$qih$1@atlantis.news.tpi.pl...
[...]
>Jak to najwydajniej napisać? Oczywiście rozwiązania typu top 1 +
>odpowiednie sortowanie odpada ponieważ przykład jest uproszczony, a
>rzeczywista tabela osób może zawierać wiele tego typu rekordów.
[...]
>struktura jest mi dana i nie mogę jej zmienić

W takim razie jedyną inną niż sort+top możliwość widzę w napisaniu własnej
funkcji, która zwróci aktualne dane. Nie wiem na ile zauważalna będzie
różnica, ale pewne potencjalne źródło zysku w tym jest: sortowanie zestawu
rekordów wymaga więcej czasu niż ich jednokrotne przejrzenie i odnalezienie
właściwej wartości. Raz byłem zmuszony do zastosowania podobnego
rozwiązania i opłaciło się, jednak mogłem tę funkcję do bazy dołożyć. Jeśli
natomiast niemożność zmiany struktury oznacza u Ciebie również, że nie
można dopisać czegokolwiek nowego (czyli np. funkcji), to można jeszcze
stworzyć własną bazę i w niej funkcję odwołującą się do tabel z bazy
głównej. Czy to ma w ogóle jakikolwiek sens? Nie wiem. Trzeba by spróbować
obydwu rozwiązań, porównać wyniki i zastanowić się czy zysk jest wart tej
niemałej komplikacji.

--
Pozdrawiam :-)
Bartek




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 08-03-2007 00:02

  Johnny wrote:
> Istnieje dajmy na to tabela osoby o polach: id, od, do, nazwisko oraz
> tabela wypożyczenie o polach: od, do, id_osoby, id_przedmiotu.
>
> W tabeli wypożyczenie jest zapis:
> 2007-02-01, 2007-02-28, 1, 123
> w tabeli osoby są dwa rekordy (odnoszą się do tej samej osoby):
> 2007-01-01,2007-02-03, 1, Kowalska
> 2007-02-04,9999-12-31, 1, Kowalska-Nowa
> i teraz chodzi o to by zrobić selecta, który zwróci rekordy wypożyczeń o
> strukturze:
> nazwisko,id_przemiotu z okresu od 2007-02-01 do 2007-02-28 i by w
> przypadku, gdy złączenie zwróci dwa rekordy osoby, pojawiły się dane
> najbardziej aktualne, czyli:
> Kowalska-Nowak,123
>
> Jak to najwydajniej napisać? Oczywiście rozwiązania typu top 1 +
> odpowiednie sortowanie odpada ponieważ przykład jest uproszczony, a
> rzeczywista tabela osób może zawierać wiele tego typu rekordów.
>

Z najnowszym sobie nie poradzisz, ale ten system ma pewnie kilka założeń na
temat tych okresów. I przy pewnych założeniach zadziała takie bardzo proste
zapytanie:

select *
from osoby o, wypozyczenia w
where o.id = w.id_osoby
and w.do between o.od and o.do

--
P.M.




johnny - 08-03-2007 00:02

  > select *
> from osoby o, wypozyczenia w
> where o.id = w.id_osoby
> and w.do between o.od and o.do
>

Bingo! Jak mogłem na to nie wpaść? Jeszcze to jutro sprawdzę ale już na
"sucho" widać, że to powinno zadziałać.

Wielkie dzięki przedpiścom i Tobie oczywiście.

--
Pozdrawiam
Johnny
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf =?UTF-8?Q?=5Bmysql=5D_jak_pobra=C4=87_warto=C5=9B=C4=87_ AUTO=5F?==?UTF-8?Q?INCREMENT=3F?= Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8 =?iso-8859-2?q?Co_oznacza_b=B3=B1d_Warning:_mysql=5Fconnect() _[function.mysql-connect]:_Can't_connect_to_local_MySQL_server_through_sock et_'/var/run/mysqld/mysqld.sock'_(2)_in?= =?iso-8859-2?q?Informatyka,_Java,_EJB,_Ajax,_Spring=2E_Czy=BF by_to_koniec_=B6wiata,_czy_te=BF_nasze_uczelnie_b= EAd=B1_uczy=B3y_w_ko=F1cu!_czego_praktycznego_=2E= 2E=2E=2E?= [MS SQL 2005] =?windows-1250?Q?Ilo=9C=E6_wiersz=F3w_w_zbiorze_wynikowym?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lubiatowo.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