1 (edited by skuelas 2011-01-18 10:31:05)

Topic: Darbas su 3 lentelėm

Kas nors padėkit man atnaujinti info naudojant 3 lenteles nes niekas nesigauna dar nesu tiek pazenges kad su ę lentelėm dirbti...
Reikia atnaujinti zaidimu_failai.zaidimo_kv is siu duomenu kai sutampa zaidimu_failai.atsakymo_id = zaidimu_ats.id ir tada toliau kai sutampa atsakymai_pagr.id = zaidimu_ats.atsp_id tada imama info iš atsakymai_pagr.zaidimo_kv į zaidimu_failai.zaidimo_kv

zaidimu_failai
-----------------------
zaidimo_kv    |  atsakymo_id
.........................................
                    | 12


      atsakymai_pagr
-----------------------
id                  |  zaidimo_kv
........................................
   3                 | ggg

      zaidimu_ats
-----------------------
id                  |  atsp_id
..........................................
        12            |3

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Darbas su 3 lentelėm

Pirmiausia paskaityk dokumentacijoje, kaip dirbama su daugiau negu viena lentele UPDATE komandoje:
http://dev.mysql.com/doc/refman/5.1/en/update.html

Tada bandyk para6yt užklausą, jeigu kas nesigaus, ją rodyk - bandysim padėt.

Galiu pasakyti tik tiek, kad logika ten yra ta pati, kaip ir SELECT užklausose (-;

Re: Darbas su 3 lentelėm

minde wrote:

Pirmiausia paskaityk dokumentacijoje, kaip dirbama su daugiau negu viena lentele UPDATE komandoje:
http://dev.mysql.com/doc/refman/5.1/en/update.html

Tada bandyk para6yt užklausą, jeigu kas nesigaus, ją rodyk - bandysim padėt.

Galiu pasakyti tik tiek, kad logika ten yra ta pati, kaip ir SELECT užklausose (-;

As bandziau jau n kartų ir niekas nesigauna geriausias atvejis kuris pavyko tai tik viena reikšme užpildymas visą stuplelį, argi labai sunku jums pam parašyti tą užklausą, aš ir taip vėluoju su darbais o ir suprasti tą mysql labai sunku.

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Darbas su 3 lentelėm

skuelas wrote:

As bandziau jau n kartų ir niekas nesigauna geriausias atvejis kuris pavyko tai tik viena reikšme užpildymas visą stuplelį, argi labai sunku jums pam parašyti tą užklausą, aš ir taip vėluoju su darbais o ir suprasti tą mysql labai sunku.

Tavo bandymai neatsispindi šiame poste.. šiaip jei jau dirbi su MySQL'u tai kodėl jos nepasimokius? kol kas matosi tik noras daryti copy->paste

No warning? No action? I hate this situation!

Re: Darbas su 3 lentelėm

xeranas wrote:
skuelas wrote:

As bandziau jau n kartų ir niekas nesigauna geriausias atvejis kuris pavyko tai tik viena reikšme užpildymas visą stuplelį, argi labai sunku jums pam parašyti tą užklausą, aš ir taip vėluoju su darbais o ir suprasti tą mysql labai sunku.

Tavo bandymai neatsispindi šiame poste.. šiaip jei jau dirbi su MySQL'u tai kodėl jos nepasimokius? kol kas matosi tik noras daryti copy->paste

ką tu galvoji kad sėdžiu kaip koks durnelis ir laukiu kol kas man parašys?.. Man jau nervos nelaiko niekas nesigauna su tuo mysql nėra mormalių paiiškinimų kaip ką daryti sintaksės iš viso beveik neina suprasti dar ta logika tai iš viso stogą rauna man jau...
nieko nekeičia iš viso čia mano vėliausias bandymas...

UPDATE zaidimu_failai,atsakymai_pagr SET  zaidimu_failai.zaidimo_kv =atsakymai_pagr.zaidimo_kv
WHERE atsakymai_pagr.id= (select atsp_id from zaidimu_ats limit 1) AND zaidimu_failai.atsakymo_id = (select id from zaidimu_ats limit 1)

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Darbas su 3 lentelėm

skuelas wrote:

ką tu galvoji kad sėdžiu kaip koks durnelis ir laukiu kol kas man parašys?.. Man jau nervos nelaiko niekas nesigauna su tuo mysql nėra mormalių paiiškinimų kaip ką daryti sintaksės iš viso beveik neina suprasti dar ta logika tai iš viso stogą rauna man jau...

Tai ir reikia pradėti nuo to - ką esi padaręs. Juk niekas nenori skaityti beletristikas ir užsiimti svetimų problemų sprendimų paieška. Visi skaitydami jaučiasi lygiai taip pat kaip ir tu. Bendrai paėmus kiekviena naujai mokomasi technologija yra sąlyginai sunku, todėl reikia pradėti nuo elementarių dalykų ir nekišti nagų ten, kur reikia daugiau žinių.

skuelas wrote:

UPDATE zaidimu_failai, atsakymai_pagr
   SET  zaidimu_failai.zaidimo_kv = atsakymai_pagr.zaidimo_kv
WHERE atsakymai_pagr.id= (select atsp_id from zaidimu_ats limit 1)
   AND zaidimu_failai.atsakymo_id = (select id from zaidimu_ats limit 1)

Manau pirma tavo klaida yra ta, kad tu naudoji sub-užklausas, vietoje lentelių sujungimo. Jos dar gal ir tiktų, bet jų logika pas tave tokia, kad jos tiesiog paima pirmą pasitaikanti ID iš lentelės. Kitaip sakant nėra atrenkami susiję duomenys. Jeigu jau kažką atrinkinėji - tai naudok WHERE.

Re: Darbas su 3 lentelėm

minde wrote:
skuelas wrote:

UPDATE zaidimu_failai, atsakymai_pagr
   SET  zaidimu_failai.zaidimo_kv = atsakymai_pagr.zaidimo_kv
WHERE atsakymai_pagr.id= (select atsp_id from zaidimu_ats limit 1)
   AND zaidimu_failai.atsakymo_id = (select id from zaidimu_ats limit 1)

Manau pirma tavo klaida yra ta, kad tu naudoji sub-užklausas, vietoje lentelių sujungimo. Jos dar gal ir tiktų, bet jų logika pas tave tokia, kad jos tiesiog paima pirmą pasitaikanti ID iš lentelės. Kitaip sakant nėra atrenkami susiję duomenys. Jeigu jau kažką atrinkinėji - tai naudok WHERE.

Logika logika logika man tai nesuprantama :)
WHERE naudoju, o kaip be subužklausų apseiti neįsivaizduoju, kitaip nesigauna.

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Darbas su 3 lentelėm

UPDATE dokumentacijoje (nuorodą daviau ir prašiau paskaityt), yra toks pavyzdys:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

čia yra atnaujinama viena lentelė pagal kitos lentelės duomenis, kai lentelių įrašai yra susiję. Tau realiai reikia tik perrašyti pagal savo lenteles.

Re: Darbas su 3 lentelėm

minde wrote:

UPDATE dokumentacijoje (nuorodą daviau ir prašiau paskaityt), yra toks pavyzdys:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

čia yra atnaujinama viena lentelė pagal kitos lentelės duomenis, kai lentelių įrašai yra susiję. Tau realiai reikia tik perrašyti pagal savo lenteles.

:) Patikėk šitą variantą bandęs n kartų ir nesigauna nieko gero. Dokumentaciją aš pasižiūriu bet ten man ne viskas suprantama, o kas suprantama nesigauna.

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Darbas su 3 lentelėm

skuelas wrote:

(select atsp_id from zaidimu_ats limit 1)

Logika logika logika man tai nesuprantama :)
WHERE naudoju, o kaip be subužklausų apseiti neįsivaizduoju, kitaip nesigauna.

Parodyk, kur toje sub-užklausoje yra duomenys atrenkami pagal ką nors (WHERE).

Re: Darbas su 3 lentelėm

minde wrote:
skuelas wrote:

(select atsp_id from zaidimu_ats limit 1)

Logika logika logika man tai nesuprantama :)
WHERE naudoju, o kaip be subužklausų apseiti neįsivaizduoju, kitaip nesigauna.

Parodyk, kur toje sub-užklausoje yra duomenys atrenkami pagal ką nors (WHERE).

tai selectą įkišau tik tam kad nesikeiktų mysql nes jei rašau
zaidimu_failai.atsakymo_id = zaidimu_ats.id
tai meta klaidas ir nenori visai nieko daryti.

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Darbas su 3 lentelėm

žodžiu mano patarimas:

1) pasirašyk SELECT tipo užklausą, kuri grąžintu visu trijų susijusių lentelių duomenis;
2) pabandyk palikti reik tau aktualius stulpelius ir atfiltruok reikiamus rezultatus;

Ir parodyk čia tą užklausą.

Sekantis žingsnis bus ją lengvai modifikuoti ir perdaryti į UPDATE tipo užklausą.

13 (edited by skuelas 2011-01-18 14:11:27)

Re: Darbas su 3 lentelėm

minde wrote:

žodžiu mano patarimas:

1) pasirašyk SELECT tipo užklausą, kuri grąžintu visu trijų susijusių lentelių duomenis;
2) pabandyk palikti reik tau aktualius stulpelius ir atfiltruok reikiamus rezultatus;

Ir parodyk čia tą užklausą.

Sekantis žingsnis bus ją lengvai modifikuoti ir perdaryti į UPDATE tipo užklausą.

Nu va kažkas gavosi atrodo gerai su tuo selectu gaunu svarbiausią reikšmę atsakymai_pagr.zaidimo_kv kurį reikia update'inti į zaidimu_failai.zaidimo_kv

select atsakymai_pagr.zaidimo_kv from zaidimu_ats,atsakymai_pagr,zaidimu_failai
where zaidimu_failai.atsakymo_id = zaidimu_ats.id and zaidimu_ats.atsp_id = atsakymai_pagr.id

Papildau:
EINA SAU prašviesėjo galva ir pamačiau kaip tą update įkišti...  ir viskas gavosi. Ale tu minde tikras genijus taip sakant netiesiogei įlendi man į galvą ir pravalai visą brudą mano galvoje kad suvokčiau tikrąją tiesą :D

update zaidimu_failai set zaidimo_kv =( select atsakymai_pagr.zaidimo_kv from zaidimu_ats,atsakymai_pagr
where zaidimu_failai.atsakymo_id = zaidimu_ats.id and zaidimu_ats.atsp_id = atsakymai_pagr.id)
var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)