Topic: Updatas atnaujinti lenteles irasus "porcijomis"

Ar eina igivendinti toki Updata su vienu queriu, jei taip tai mazdaug i ka gilintis ? :)

Lentele A turi laukus 'pirmas' ir 'antras' ir 'trecias'

Reikia atnaujinti lenteles 'pirmas'  tuos, kuriu laukas 'antras' yra tarp desimties didziausiu su vienodu lauku 'trecias'

Na Update selectas kazkodel neveikia.. kazka Minde buvo rases lyg neina updatinti ir selectinti lauku is tos pacios lenteles ?  Tai tada ko gero vienu queriu neiseis tokiu updatu atlikti taip  ?

Re: Updatas atnaujinti lenteles irasus "porcijomis"

Taip, toje pačioje užklausoje atnaujinti (UPDATE) ir gauti (SELECT) duomenis iš tos pačios lentelės negalima. Todėl teks naudotis daugiau nei viena užklausa. Jeigu kyla problemų su tuo, kad tarp užklausų kažkas gali keisti duomenis tada reikia  naudoti lentelės/įrašų rakinimus (LOCKING), o norint teisingai apdoroti klaidas vykstančias tarp užklausų derėtų naudotis tranzakcijomis (TRANSACTIONS).

Apie rakinimus ir tranzakcijas: http://dev.mysql.com/doc/refman/4.1/en/ … mands.html

Pridursiu, kad:
- naudojant MyISAM variklį yra galimybė rakinti tik visą lentelė, o naudojant InnoDB variklį galima rakinti atskirus įrašus;
- MyISAM nepalaiko tranzakcijų.

Re: Updatas atnaujinti lenteles irasus "porcijomis"

aciu minde ;) kaip ir visada operatyviai padedi ;) Neisivaizduoju kaip tau iseina taip daznai cia but.. ;)

taip ir galvojau kad problema sicia ...  Reikes pradet apie tas transakcijas skaityt... nes jau ne pirmoj vietoj ju prireikia.. o iki siol taip ir neprisiverciau gerai pastudijuot ;)

Re: Updatas atnaujinti lenteles irasus "porcijomis"

Bandziau darytis bet vistiek nesigauna, sikarta uzstrigau ties UPDATO ir ORDER BY ... LIMIT panaudojimo.. raso vis
#1221 - Incorrect usage of UPDATE and LIMIT

Galbut ir cia yra kokios nors taisykles kaip negalima vartot?... siaip kiek ziurejau sintakse tai turetu leisti ...
(sunku pateikti uzklausos pavizdi kuri bandau.. nes pas mane ten viskas sudetingiau negu kad pirmoj zinutej klausiu .. )

T.y. bandau daryti taip: Atnaujinti visus irasus kuriu 'trecias'  yra lygus tam tikram skaiciui, rikiuoju pagal `antras` ir nurodau ribojima - LIMIT 12

Re: Updatas atnaujinti lenteles irasus "porcijomis"

Kad ir kaip viskas būna sudėtinga vistiek parodyti galutinę užklausą turi būti galimybė ;) Visada matant užklausą galima pradėti nuo struktūros/sintaksės klaidų, o tik paskui pereiti prie loginių klaidų.

Dabar iš klaidos pranešimo galima tik spelioti, kad galbūt naudoti UPDATE kelioms lentelėms iš karto. Dokumentacijoje parašyta, kad naudojant UPDATE komandą daugiau negu vienai lentelei LIMIT naudoti nebegalima, cituoju:

For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used.

šaltinis: http://dev.mysql.com/doc/refman/4.1/en/update.html

Re: Updatas atnaujinti lenteles irasus "porcijomis"

hm aciu uz dar viena vertinga pamoka ;) Dabar lieka sugalvot kaip issprest sisudariusia nauja problema, updatas is keliu lenteliu su rikiavimu ir limitais....

(tu teisus.. pas mane update yra kelios lenteles... tas laukas kuris turi buti vienodas 'trecias'  atsispindi tiki dar vienoje lentele...  panasiai kaip  Zmones suskirstyti i grupes... o sios i dar didesnes grupes.. man reikia is tu dar didesniu grupiu tam tikram kiekiui zmoniu skirti viena statusa.. tam tikram kitam kiekiui zmoniu skirti kita statusa... ir t.t.)