Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razjasnjenje jednog MySQl selecta ?

[es] :: MySQL :: Razjasnjenje jednog MySQl selecta ?

[ Pregleda: 1014 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Leruman
Srbija

Član broj: 141635
Poruke: 92
*.alshamil.net.ae.



+4 Profil

icon Razjasnjenje jednog MySQl selecta ?03.02.2013. u 08:00 - pre 136 meseci
Na jednoj temi u okviru stackoverflow nasao sam jedan Mysql kod ali ne razumem jedna deo koda. Treba mi pomoc iskusjih koelga sa foruma oko razumavanja, posto cu verovatno morati da ga modifikujem kasnije.

Kompetan post koji resava problem je na adresi
http://stackoverflow.com/quest...e-view-with-parameter-in-mysql

Ko koji mene muci je u odgovoru na postavljeno pitanje. Sledece tri linije su u pitanju

Prva linija kreira funkciju, to razumem:
Code:
create function p1() returns INTEGER DETERMINISTIC NO SQL return @p1;
Sledece je kreiranje pogleda koji koristi ovu funkciju, i to je ok
Code:

create view h_parm as
select * from sw_hardware_big where unit_id = p1() ;
Ovde sam zbunjen. Select radi sto treba ali ne razume kako
Code:
select s.* from (select @p1:=12 p) parm , h_parm s;

Buni me konstrukcija posle from. Moze li neko da mi objasni logiku parametara posle from komande. Kod radi svoju svrhu ali hocu da razumem KAKO tacno radi.

Hvala unapred.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Razjasnjenje jednog MySQl selecta ?03.02.2013. u 10:00 - pre 136 meseci
Citat:
Leruman

Code:
select s.* from (select @p1:=12 p) parm , h_parm s;

Buni me konstrukcija posle from. Moze li neko da mi objasni logiku parametara posle from komande. Kod radi svoju svrhu ali hocu da razumem KAKO tacno radi.


select @p1:=12 p

radi 2 stvari
1. vraca vrednost 12 sa imenom p (dakle isto kao da si uradio "select 12 as p"_ kao sadrzaj generisane tabele parm
2. setuje vrednost varijable p1 na 12

Sta se desava, ovaj upit ti vraca proizvod tabele parm i h_parm (realno imas select * from parm, hparm)

ti u parm imas:
Code:

p
12


ti u hparm imas recimo (
Code:

a b c unit_id
1 2 3 12
2 2 3 12
3 2 3 12
4 3 5 12 


rezultat ti je
Code:

p  a b c unit_id
12 1 2 3 12
12 2 2 3 12
12 3 2 3 12
12 4 3 5 12 



ono sto je ovde problem je sto ovo moze da prestane da radi - bez upozorenja posto da li ce iz razloga sto view koristi funkciju koja koristi trenutnu vrednost interne varijable mysql da generise sadrzaj hparm u svakom slogu izlaza ili samo na pocetku nije definisano standardom i optimizer radi sada na nacin koji tebi odgovara te ce je generisati samo prvi put, ali to moze da se promeni ako neko odluci da je bolje drugacije.

takodje to je vrlo spor nacin da dodjes do resenja, ako napises sta ti je tacno cilj mozda napravimo neko resenje koje je mnogo kvalitetnije (posto je ovo bespotrebna komplikacija koja ce dovesti do ko zna kakvih problema u buducnosti)

 
Odgovor na temu

[es] :: MySQL :: Razjasnjenje jednog MySQl selecta ?

[ Pregleda: 1014 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.