ďťż
 
[MySQL5] problem z zastosowanie funkcji, procedury w celu unikniecia powtórzeń kodu w zapytaniach ďťż
 
[MySQL5] problem z zastosowanie funkcji, procedury w celu unikniecia powtórzeń kodu w zapytaniach
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

[MySQL5] problem z zastosowanie funkcji, procedury w celu unikniecia powtórzeń kodu w zapytaniach



SuperTen - 30-10-2005 10:51
[MySQL5] problem z zastosowanie funkcji, procedury w celu unikniecia powtórzeń kodu w zapytaniach
  Witam grupowiczów.

Natknołem się na problem którego nie potrafię przeskoczyć, chodź
próbowałem, ale zawsze jest coś nie tak.

Potrzebuję użyć w kliku zapytaniach (w WHERE) wartości zwróconych przez
inne zapytanie.

Jako że potrzebuje to zrealizować w kilku zapytaniach to nie chce w
każdym z nich powtarzać tego samego kodu.

To powtarzające się zapytanie zwraca identyfikatory (jeden lub kilka)
pewnej tabeli

To co ja wymyśliłem do tej pory to zastosowanie Funkcji lub procedur

1.
Napisałem sobie funkcje która zwraca mi te ID po przecinku i chciałem to
umiescić mniejwięcej tak:
SELECT * FROM tabela WHERE a IN(moja_funkcja(12345)),
oczywiście to nie zadziała po pod uwagę weżmie tylko pierwszą liczbe
(moja_funkcja zwracała np.: "5,67,23")

2.
Wyczytałem że IN za parametr moze przyjąć podzapytanie, a więc napisałem
procedure która wykonuje zapytanie o te ID które mnie interesują jednak
to też nie działa bo nie mozna użyć procedury w SELECT
SELECT * FROM tabela WHERE a IN CALL moja_procedura(12345)

Naprawdę wierzę w to że da się to zrobić nie powtarzająć we wszystkich
zapytaniach dość skomplowanego kodu zwracającego identyfikatory

Przyszło mi teraz do głowy że można by jeszcze zrobić widok:
SELECT * FROM tabela WHERE a IN(SELECT id FROM widok WHERE b=12345)

czy to dobry trop?

--
"Codziennie gdy wstajesz, otrzymujesz szansę aby stać się lepszym"
$this->wyslij(); // Linux friendly but win because i must





Krzysztof Wiśniewski - 30-10-2005 10:51

  Użytkownik "SuperTen" <SuperTen@Prawie21ProcentPowietrza.pl> napisał w
wiadomości news:djsneb$4an$1@tkdami.pl...
| Witam grupowiczów.
|
| Natknołem się na problem którego nie potrafię przeskoczyć, chodź
| próbowałem, ale zawsze jest coś nie tak.
|
| Potrzebuję użyć w kliku zapytaniach (w WHERE) wartości zwróconych przez
| inne zapytanie.
|
| Jako że potrzebuje to zrealizować w kilku zapytaniach to nie chce w
| każdym z nich powtarzać tego samego kodu.
|
| To powtarzające się zapytanie zwraca identyfikatory (jeden lub kilka)
| pewnej tabeli
|
| To co ja wymyśliłem do tej pory to zastosowanie Funkcji lub procedur
|
| 1.
| Napisałem sobie funkcje która zwraca mi te ID po przecinku i chciałem to
| umiescić mniejwięcej tak:
| SELECT * FROM tabela WHERE a IN(moja_funkcja(12345)),
| oczywiście to nie zadziała po pod uwagę weżmie tylko pierwszą liczbe
| (moja_funkcja zwracała np.: "5,67,23")
|
| 2.
| Wyczytałem że IN za parametr moze przyjąć podzapytanie, a więc napisałem
| procedure która wykonuje zapytanie o te ID które mnie interesują jednak
| to też nie działa bo nie mozna użyć procedury w SELECT
| SELECT * FROM tabela WHERE a IN CALL moja_procedura(12345)
|
| Naprawdę wierzę w to że da się to zrobić nie powtarzająć we wszystkich
| zapytaniach dość skomplowanego kodu zwracającego identyfikatory
|
| Przyszło mi teraz do głowy że można by jeszcze zrobić widok:
| SELECT * FROM tabela WHERE a IN(SELECT id FROM widok WHERE b=12345)
|
| czy to dobry trop?
|

Bardzo dobry trop. Jedyne ograniczenie dotyczy ilości kolumn zwracanych
przez podselekt (ten w nawiasie). Wynosi ono 1. To dolne i górne
ograniczenie :)

Pozdrawiam,
Krzysiek




=?ISO-8859-2?Q?Rados=B3aw_Witkowicki?= - 04-11-2005 23:16
=?ISO-8859-2?Q?Re=3A_=5BMySQL5=5D_problem_z_zastosowanie?==?I SO-8859-2?Q?_funkcji=2C_procedury_w_celu_unikniecia_powt=F 3?==?ISO-8859-2?Q?rze=F1_kodu_w_zapytaniach?=
  SuperTen napisał(a):
> Witam grupowiczów.
>
> Natknołem się na problem którego nie potrafię przeskoczyć, chodź
> próbowałem, ale zawsze jest coś nie tak.
>
> Potrzebuję użyć w kliku zapytaniach (w WHERE) wartości zwróconych przez
> inne zapytanie.
>
> Jako że potrzebuje to zrealizować w kilku zapytaniach to nie chce w
> każdym z nich powtarzać tego samego kodu.
>
> To powtarzające się zapytanie zwraca identyfikatory (jeden lub kilka)
> pewnej tabeli
>
> To co ja wymyśliłem do tej pory to zastosowanie Funkcji lub procedur
>
> 1.
> Napisałem sobie funkcje która zwraca mi te ID po przecinku i chciałem to
> umiescić mniejwięcej tak:
> SELECT * FROM tabela WHERE a IN(moja_funkcja(12345)),
> oczywiście to nie zadziała po pod uwagę weżmie tylko pierwszą liczbe
> (moja_funkcja zwracała np.: "5,67,23")
>
> 2.
> Wyczytałem że IN za parametr moze przyjąć podzapytanie, a więc napisałem
> procedure która wykonuje zapytanie o te ID które mnie interesują jednak
> to też nie działa bo nie mozna użyć procedury w SELECT
> SELECT * FROM tabela WHERE a IN CALL moja_procedura(12345)
>
> Naprawdę wierzę w to że da się to zrobić nie powtarzająć we wszystkich
> zapytaniach dość skomplowanego kodu zwracającego identyfikatory
>
> Przyszło mi teraz do głowy że można by jeszcze zrobić widok:
> SELECT * FROM tabela WHERE a IN(SELECT id FROM widok WHERE b=12345)
>
> czy to dobry trop?

Nie jestem pewnien, ale przeczutaj w dokumentacji do MySQL 5.0 czy
zapytania zagniezdzone sa mozliwe. Mi sie wydaje, ze jeszcze nie, ale
moge sie mylic.

Pozdro




artiun - 04-11-2005 23:16
=?ISO-8859-2?Q?Re=3A_=5BMySQL5=5D_problem_z_zastosowanie?==?I SO-8859-2?Q?_funkcji=2C_procedury_w_celu_unikniecia_powt=F 3?==?ISO-8859-2?Q?rze=F1_kodu_w_zapytaniach?=
  SuperTen napisał(a):

> To co ja wymyśliłem do tej pory to zastosowanie Funkcji lub procedur
>
> 1.
> Napisałem sobie funkcje która zwraca mi te ID po przecinku i chciałem to
> umiescić mniejwięcej tak:
> SELECT * FROM tabela WHERE a IN(moja_funkcja(12345)),
> oczywiście to nie zadziała po pod uwagę weżmie tylko pierwszą liczbe
> (moja_funkcja zwracała np.: "5,67,23")

A tak?

mysql> select * from ulog where find_in_set( uid, '000116,000115' ) > 0;
+--------+------------+----------+------------+----------+-------------+
| uid | dlast | tlast | dfirst | tfirst | raddr |
+--------+------------+----------+------------+----------+-------------+
| 000115 | 2005-08-20 | 02:44:10 | 2005-08-20 | 02:44:10 | 10.17.45.50 |
| 000116 | 2005-08-20 | 02:45:10 | 2005-08-20 | 02:45:10 | 10.17.45.50 |
+--------+------------+----------+------------+----------+-------------+
2 rows in set (0.00 sec)

mysql> delimiter //
mysql> create function funtest() returns char(32) return '000115,000116';
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> select * from ulog where find_in_set( uid, funtest() ) > 0;
+--------+------------+----------+------------+----------+-------------+
| uid | dlast | tlast | dfirst | tfirst | raddr |
+--------+------------+----------+------------+----------+-------------+
| 000115 | 2005-08-20 | 02:44:10 | 2005-08-20 | 02:44:10 | 10.17.45.50 |
| 000116 | 2005-08-20 | 02:45:10 | 2005-08-20 | 02:45:10 | 10.17.45.50 |
+--------+------------+----------+------------+----------+-------------+
2 rows in set (0.00 sec)

Chyba robi co powinno, choć funkcja jest max. uproszczona.

--
Artur
  • 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 Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?= [postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?= [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?= [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kfia-tek.keep.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