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

Prelazak sa 4.x na 5.x verziju servera

[es] :: MySQL :: Prelazak sa 4.x na 5.x verziju servera

[ Pregleda: 2221 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bokacio

Član broj: 189612
Poruke: 112
*.adsl-a-1.sezampro.yu.



+27 Profil

icon Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 11:52 - pre 172 meseci
Pozdrav,

Resio sam da posle dugog vremena predjem sa verzije 4 MySQL servera na verziju 5.

Koliko sam mogao da primetim, prilikom INSERT, CREATE i prostih SELECT upita nema problema sa kompatibilnoscu.

Medjutim, kod kompleksnijih upita sa LEFT JOIN komandom imam problema:

Code:
SELECT
events.importance,
events.color,
events.id,
events.event_type_id,
events.date_time,
event_types.name,
events.description,
events.document_info,
employees.display,
records.name,
users.name
FROM events, changes, objects
LEFT JOIN records on events.record_id = records.id
LEFT JOIN event_types on events.event_type_id = event_types.id
LEFT JOIN employees on events.employee_id = employees.id
LEFT JOIN users on events.user_id = users.id
WHERE events.id = changes.event_id
AND events.record_id = 1
AND objects.locked = "false"
GROUP BY events.id
ORDER BY events.date_time DESC


Ovaj upit koji lepo radi u 4.x verziji, daje gresku Unknown column 'events.record_id' in 'on clausule' u verziji 5.x servera.

Da li sam nesto propustio, ili da li treba da na nesto obratim paznju prilikom koriscenja LEFT JOIN u v5.x servera?

Hvala najlepse
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 12:12 - pre 172 meseci
da .. 4.x nije postovao sql standard, 5.x ga postuje tako da sada taj upit ne radi ...

pogledaj po redu:

http://dev.mysql.com/doc/refman/4.1/en/upgrade.html
http://dev.mysql.com/doc/refman/5.0/en/upgrade.html
http://dev.mysql.com/doc/refman/5.1/en/upgrade.html

ima raznih nekompatibilnosti ... tako da moras da prodjes kroz te strane (ako radis upgrade radi ili na 5.1 ili na 5.5 posto je 5.0 sada u extended supportu sto znaci da za njega nema daljeg razvijanja/ 5.1 je trenutni GA a 5.5 je trenutna beta pa odluci sam .. ja drzim svoje sajtove sve na 5.5 ali nije bas bug free jos uvek tako da ga ne predlazem za production, 5.1 je skroz ok)


 
Odgovor na temu

Bokacio

Član broj: 189612
Poruke: 112
*.adsl-a-1.sezampro.yu.



+27 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 12:28 - pre 172 meseci
Hvala Bogdane,

Da li mozda znas (na prvi pogled) sta ne valja kod mog upita. Nije mi jasna greska uopste.

Inace koristim v5.1 servera.

Upravo citam stranice sa linkova koje si mi poslao.

Pozdrav
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 13:06 - pre 172 meseci
pogledaj tvoj kod

Code:

FROM events, changes, objects
LEFT JOIN records on events.record_id = records.id
LEFT JOIN event_types on events.event_type_id = event_types.id
LEFT JOIN employees on events.employee_id = employees.id
LEFT JOIN users on events.user_id = users.id


to je

Code:

FROM events 
INNER JOIN changes
INNER JOIN objects
LEFT JOIN records on events.record_id = records.id
LEFT JOIN event_types on events.event_type_id = event_types.id
LEFT JOIN employees on events.employee_id = employees.id
LEFT JOIN users on events.user_id = users.id


kako LEFT JOIN ima prioritet nad INNER JOIN to je onda

Code:

FROM events 
INNER JOIN changes
INNER JOIN
(
objects
LEFT JOIN records on events.record_id = records.id
LEFT JOIN event_types on events.event_type_id = event_types.id
LEFT JOIN employees on events.employee_id = employees.id
LEFT JOIN users on events.user_id = users.id
)


kao sto vidis u zagradi nema tabele events te events.record_id ne postoji ... promeni upit da bude

Code:

FROM changes, objects, events
LEFT JOIN records on events.record_id = records.id
LEFT JOIN event_types on events.event_type_id = event_types.id
LEFT JOIN employees on events.employee_id = employees.id
LEFT JOIN users on events.user_id = users.id


i sve ce da radi :)
 
Odgovor na temu

Bokacio

Član broj: 189612
Poruke: 112
*.adsl-a-5.sezampro.rs.



+27 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 13:54 - pre 172 meseci
Hvala Bogdane,

Sada radi.

Zanima me samo zasto se ova tabela objects "pretvara" u ovo:

Code:

INNER JOIN
(
objects
LEFT JOIN records on events.record_id = records.id
LEFT JOIN event_types on events.event_type_id = event_types.id
LEFT JOIN employees on events.employee_id = employees.id
LEFT JOIN users on events.user_id = users.id
)


Nije mi jasno zasto i sta znaci sto je on LEFT JOIN stavio unutar zagrada od INNER JOIN.

Hvala na pojasnjenju. Postoji li na netu neki dobar tutorijal koji ce mi ovo objasniti.

Pozdrav!
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 14:07 - pre 172 meseci
Citat:

Zanima me samo zasto se ova tabela objects "pretvara" u ovo:


izgleda nisam napisao dovoljno jasno .. sorry ...

Code:

... from a,b,c,d ...


je isto sto i

Code:

... from a inner join b inner join c inner join d ...


to je samo razlicita sintaksa ...

e sada ... kao sto je
Code:

a+b+c+d*e*f


isto sto i

Code:

a+b+c+(d*e*f)


zato sto je prioritet operacije * veci nad prioritetom operacije +

tako i posto je prioritet LEFT join veci od prioriteta INNER join

Code:

... from a inner join b inner join c left join d left join e


mozemo napisati i kao

Code:

... from a inner join b inner join (c left join d left join e)


dakle samo je rec o prioritetu operatora ... te kao sto * ima veci prioritet od + tako left join ima veci prioritet od inner join.

[Ovu poruku je menjao bogdan.kecman dana 10.02.2010. u 15:33 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 14:35 - pre 172 meseci
sto se tutorijala tice ... "nemam pojma" :D ..
 
Odgovor na temu

Bokacio

Član broj: 189612
Poruke: 112
*.adsl-a-5.sezampro.rs.



+27 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 14:36 - pre 172 meseci
Hvala jos jednom,

Meni jedino ne ide u glavu zasto su dodate zagrade u ovom slucaju:

FROM events
INNER JOIN changes
INNER JOIN
(
objects
LEFT JOIN records on events.record_id = records.id
LEFT JOIN event_types on events.event_type_id = event_types.id
LEFT JOIN employees on events.employee_id = employees.id
LEFT JOIN users on events.user_id = users.id
)

Kako ova tabela objects utice na ove LEFT JOIN-e? I zasto smo premestanjem tabele events uspeli da pokrenemo upit.

Hvala!
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 15:06 - pre 172 meseci
Citat:

Meni jedino ne ide u glavu zasto su dodate zagrade u ovom slucaju:


nisu "dodate" zagrade ... left ima veci prioritet od inner .. dakle kao * u odnosu na + ... to je kao da me pitas zasto je

Code:

a+b+c+(d*e*f)


ne moras da napises te zagrade, one se podrazumevaju posto * ima veci prioritet .. tako i ovde ... LEFT ima veci prioritet

stvarno ne umem da ti objasnim jednostavnije .. to se uci iz matematike u prvih par razreda osnovne skole .. odma posle tablice mnozenja ..
 
Odgovor na temu

Bokacio

Član broj: 189612
Poruke: 112
*.adsl-a-5.sezampro.rs.



+27 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 15:31 - pre 172 meseci
Hvala jos jednom,

Nije trebala ona recenica sa tablicom mnozenja, ali ok :)

Hvala jos jednom
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 15:41 - pre 172 meseci
nisam mislio nista lose time ... samo kazem da ne umem ja jednostavnije da objasnim .. (prosveta mi nije jaca strana) ..
 
Odgovor na temu

Bokacio

Član broj: 189612
Poruke: 112
*.adsl-a-5.sezampro.rs.



+27 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 15:45 - pre 172 meseci
Ok je,

Razumem taj deo oko prvenstva, bavim se programiranjem skoro 20 godina, ali mi samo nije jasno odakle objects unutar zagrada, a ne izvan. Moje znanje o LEFT JOINU se baziralo na verziji 4.1 mysql-a koje je izgleda bilo pogresno pa mi je tesko da sada promenim nacin razmisljanja sto se tice MySQL v5.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Prelazak sa 4.x na 5.x verziju servera10.02.2010. u 16:02 - pre 172 meseci
Citat:
Bokacioali mi samo nije jasno odakle objects unutar zagrada, a ne izvan


pa zato sto LEFT ima prvenstvo. objects ima 2 operatora, sa jedne strane INNER sa druge strane LEFT, kako LEFT ima veci prioritet objects ide unutar a ne izvan zagrade

Citat:
Moje znanje o LEFT JOINU se baziralo na verziji 4.1 mysql


na 4.1 je optimizer
- imao istio prioritet za left i inner
- pogadjao stvari

i jedno i drugo je moralo da se izmeni zbog standarda ...

ovo sto je bio isti prioritet, to je ovo sto te sad pogodilo ... ono sto je "pogadjao" to znaci da je radilo ovo:

Code:

create table t1 (id int, a int);
create table t2 (id int, b int);
select * from t1 join t2 on a=b;


ma koliko je a sigurno iz t1 i b sigurno iz t2 posto ne postoji drugo a i drugo b i u tom slucaju je 4.1 nalazio sam "sta si mislio" ... a cak i ovo je radilo
Code:

create table t1 (id int, a int, b int);
create table t2 (id int, a int);
select * from t1 join t2 on a=b;


ma koliko je ovo potpuna glupost od upita, ovo bi u 4.x radilo i myusql bi "po nekoj logici" odabrao odakle ce da uzme a a odakle b ..

za ovo, 5.x kaze da je ambiguous i da nema pojma "sta si ti mislio sa a" i zahteva da to bude "on t1.b=t2.a" te nikakvo "pogadjanje" vise ne dolazi u obzir.
 
Odgovor na temu

[es] :: MySQL :: Prelazak sa 4.x na 5.x verziju servera

[ Pregleda: 2221 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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