1 (edited by skuelas 2011-01-10 10:57:11)

Topic: 1054 - Unknown column

Sveiki,

Niekaip neišeina sukurti veikiančios užklausos vis kas nors negerai, o šį kartą man iš viso nesuprantama problema taigi gal kas gali padėti išspręsti tai? Nesu aš dar pasikaustęs ant mysql...
Taip sakant man reikia atnaujinti files lentelės t_id reikšmę paimant duomenis iš lentelės h_files, stulpelio ttid kai files.r_id sutampa su h_files.id.
Klaida meta atseit tokio stulpelio nėra kaio files.r_id bet iš tikrųjų yra...

update files set t_id = (select ttid from h_files
where filess.r_id=h_files.id order by ttid desc limit 1)

MySQL atsakymas: 

#1054 - Unknown column 'files.r_id' in 'where clause'

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

Re: 1054 - Unknown column

Tai ką tu dabar esi parašęs, tai galima traktuoti taip: atnaujinti VISUS lentelės files įrašus į tokį ir tokį..

O klaida ta, kad toje tavo sub-užklausoje nurodytas stulpelis nežinomas.

Tau reikia paskaityti šiek tiek apie UPDATE sintaksę: http://dev.mysql.com/doc/refman/5.0/en/update.html

Ten rasi ir pavyzdį, kaip atnaujinti duomenis pagal kitos (antros) lentelės duomenis (-;

Re: 1054 - Unknown column

Nu padariau va taip:

update files,h_files,filess set files.t_id = h_files.ttid where h_files.id=filess.r_id

bet niekas nevyksta krauna krauna ir neužkrauna.

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

Re: 1054 - Unknown column

skuelas wrote:

Nu padariau va taip:

update files,h_files,filess set files.t_id = h_files.ttid where h_files.id=filess.r_id

bet niekas nevyksta krauna krauna ir neužkrauna.

Pirmiausia tai vykdyk ne per savo PHP programą, nes panašu, kad užklausa vyksta ilgiau negu leidžia PHP nustatymai.

Kitas dalykas, pas tave vistiek trūksta logikos: esi išvardinęs 3 lenteles, bet susietos tik dvi. Tokiu atveju MySQL'as juk daro pilną CROSS JOIN'ą, kas rezultate, turint didesniu duomenų kiekius lentelėse, sukuria labai dideles laikinas lenteles. Beto atliekant tokius veiksmus labai svarbu ir indeksai, nes kitu atveju tau gali ir valandom atrinkinėti susijusius duomenis.

Re: 1054 - Unknown column

Nesupratau ką tu čia man aiškinai :) Gal gali paaiškinti kaip kvailiui kad suprasčiau :)

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

Re: 1054 - Unknown column

1) Pas tave nėra logikos, nes naudoji TRIS lenteles, o duomenis atnaujimui atrenki tik pagal DVI:

set files.t_id = h_files.ttid where h_files.id=filess.r_id

2) Tavo užklausa, tikriausiai, vyksta daug ilgiau negu leidžiama PHP scriptui, todėl "krauna krauna ir neužkrauna". Jeigu nori kažką testuoti ir turi daug duomenų - užklausą vykdyk ne per PHP/naršyklę, o per mysql komandinės eilutės klientinę programą;
3) Sujungdamas TRIS leneteles, o nurodydamas tik DVIEJų lentelių duomenų atrinkimą, tu liepi MySQL'ui pagaminti laikiną lentelę su visom tam tikrų lentelių įrašų kombinacijom (CROSS JOIN), kas, tarkim turin po 1k įrašų dviejuose lentelėse, rezultate sudaro 1k * 1k = 1M įrašų. Dažniausiai tai reiškia daug didelius RAM ir CPU resursų suvartojimus.

Ką aiškiau pasakyt - nežinau. Aiškiau būtų jeiguaš už tave viską padaryčiau (-; Bet to daryti aš nenoriu.

Re: 1054 - Unknown column

update files,h_files,filess set files.t_id = h_files.ttid where h_files.id=filess.r_id

Tai ši užklausa parašyta gerai (be klaidų)? Ir jei aš darysiu per komandinę eilutę ar man padarys greitai nes dabar iš viso negaliu nueit į phpmyadminą :D

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

Re: 1054 - Unknown column

skuelas wrote:

update files,h_files,filess set files.t_id = h_files.ttid where h_files.id=filess.r_id

Tai ši užklausa parašyta gerai (be klaidų)? Ir jei aš darysiu per komandinę eilutę ar man padarys greitai nes dabar iš viso negaliu nueit į phpmyadminą :D

Užklausa sintaksės klaisų neturi, nes tau jas parodytų iš karto. Bet yra logikos klaidos, kurias aš tau bandžiau pasakyt.

Nieko nepakeitus komandinėje eilutėje greitai neįvykdys, bet bent jau bus šansų, kad aplamai galės įvykdyti, nes ten jis bus vyldoma tol, kol pavyks arba baigsis serverio resursai.

į phpMyAdmin patekti negali, nes ta tavo užklausa, nors ir pasibaigus PHP scriptui, vistiek yra tesiama. Ją galima nu-kill'inti (-;

Re: 1054 - Unknown column

Tai nepadėsi išspęsti logikos klaidų nes aš žalio supratimo neturiu kur tos klaidos?.. O man reikia šiandien susitvarkyti. :(

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

Re: 1054 - Unknown column

skuelas wrote:

Tai nepadėsi išspęsti logikos klaidų nes aš žalio supratimo neturiu kur tos klaidos?.. O man reikia šiandien susitvarkyti. :(

Iš tavo užklausų galima pagalvoti kad turi N lentelių ir kiekvienoje lentelėje yra N laukų su ID'zais...
Turi 3 lenteles, dvi lygini kad trečia (nesusijusia su anom dvi) paupdeitintum, kam to reikia? iš pirmo žvilgsnio čia fail by design..
Geriau pasakyk ką čia bandai padaryti? (įdomu) :)

No warning? No action? I hate this situation!

Re: 1054 - Unknown column

Visos 3 lentelės reikalingos nes jose susijusi info, man reikia iš 2 lentelelių gautų duomenų papildyti info į 3 lentelę.

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

Re: 1054 - Unknown column

Kaip pas tave susijusios files ir filess lentelės? Apie tai tu nieko nesakei ir užklausoje to nesimato.

Ir ką reiškia "papildyti" - pridėti naujų įrašų, ar atnaujinti senus įrašus?

13 (edited by skuelas 2011-01-10 13:30:18)

Re: 1054 - Unknown column

files ir filess čia 2 lentelės skirtingos tik pavadinimai panašūs :)
Pridėti naujus įrašus į konkretų stulpelį lentelės atsirenkant pagal turimą info
turiu files lentelę kurioje trūksta info ją papildyti ir atrinkti noriu iš kitų 2 lentelių.

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

Re: 1054 - Unknown column

skuelas wrote:

files ir filess čia 2 lentelės skirtingos tik pavadinimai panašūs :)
Pridėti naujus įrašus į konkretų stulpelį lentelės atsirenkant pagal turimą info

Tai sakei, kad visos trys lentelės yra susijusios - tai žinok tai ir turi matytis WHERE sąlygoje. Kitu atveju nieko gero nelauk.

Re: 1054 - Unknown column

minde wrote:
skuelas wrote:

files ir filess čia 2 lentelės skirtingos tik pavadinimai panašūs :)
Pridėti naujus įrašus į konkretų stulpelį lentelės atsirenkant pagal turimą info

Tai sakei, kad visos trys lentelės yra susijusios - tai žinok tai ir turi matytis WHERE sąlygoje. Kitu atveju nieko gero nelauk.

Nu taip jos iš dalies susijusios 2 lentelės importuotos o 1 lentelė 'sava' tai toje 'savje' lentelėje trūksta info kurią noriu gauti iš kitų dviejų.

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

Re: 1054 - Unknown column

skuelas wrote:

turiu files lentelę kurioje trūksta info ją papildyti ir atrinkti noriu iš kitų 2 lentelių.

O ką žadi trinti tas kitas dvi lenteles?

No warning? No action? I hate this situation!

Re: 1054 - Unknown column

xeranas wrote:
skuelas wrote:

turiu files lentelę kurioje trūksta info ją papildyti ir atrinkti noriu iš kitų 2 lentelių.

O ką žadi trinti tas kitas dvi lenteles?

nu paskui ištrinsiu tas 2 lenteles kai susitvarkysiu

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

Re: 1054 - Unknown column

Tai pasakyk, kaip ta 'sava' lentelė (spejų files) yra susijusi su bent viena iš kitų dviejų? Pagal kokį lauką? Kodėl to nesimato WHERE sąlygoje?

Re: 1054 - Unknown column

Dėkui kas bandėt padėti bet VISGI savo nesąmones pavyko man pačiam išsispręsti :)

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

Re: 1054 - Unknown column

Aha.. kai 3 ar 4 kartus pasakoma, kas blogai, tada ir "pats" sugebi susitvarkyt (-;