hEiti Posted May 9, 2011 Report Share Posted May 9, 2011 (edited) Ka ir iespejams izveidot sistemu Kad mysql tiek updeitots shada algoritma: UPDATE 1 table row abcd WHERE group = 111 SET value = foo UPDATE 2 table row abcd WHERE group = 222 SET value = doo UPDATE 3 table row abcd WHERE group = 333 SET value = boo Doma tada ka vajag sho visu viena reize, kad mysql updeito vienu lauku visiem ierakstiem kuri pieder grupai a un updeito ar citu vertibu visus kas pieder grupai b un ar vell citu vertibu visus kas pieder grupai c ... Vai maz tas ir iespejams? un ja ja tad kaa ? Tas ko velos panakt ir visus kas pieder grupai a,b vai c esoshos elementus sarindot, piemeram Davis grupa a Lauris grupa a Maris grupa b Anete grupa c Tad Davis iesgust vertibu 1 Laursi iegust 1 Maris iegust 2 Anete iegust 3 Pec padotam vertibam .. visu ar vienu soli ... ja maz tas ir iespejams .. problema tada, kad grupu skaits var but "neierobezots" ... idejiski .. Edited May 9, 2011 by hEiti Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted May 9, 2011 Report Share Posted May 9, 2011 Pec padotam vertibam .. visu ar vienu soli ... ja maz tas ir iespejams .. problema tada, kad grupu skaits var but "neierobezots" ... idejiski .. Nee ar vienu kveriju to nevaresi izdriit, naksies vien veikt vairkus pieprasijumus UPDATES Quote Link to comment Share on other sites More sharing options...
Faks Posted May 9, 2011 Report Share Posted May 9, 2011 (edited) var tak uztaisīt kēdes kārtība ja pirmais pabeidza veic nākošo darbibu un tamlīdzigi :) Edited May 9, 2011 by Faks Quote Link to comment Share on other sites More sharing options...
hEiti Posted May 9, 2011 Author Report Share Posted May 9, 2011 var tak uztaisīt kēdes kārtība ja pirmais pabeidza veic nākošo darbibu un tamlīdzigi :) Faks vari ierakstit kadu mazu piemeru, lai saprotu tavu domu gaajienu ? Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted May 9, 2011 Report Share Posted May 9, 2011 (edited) To var tādā gadījumā, ja Tev tās vērtības foo, doo un boo jau ir bāzē kādā tabulā ar atbilstošo grupas id, vai kodu vai whatever kādu citu unikālu lauku, pēc kura tās var atlasīt. Citādi nekas nesanāks, jo neko sarežģītāku par skalāriem mainīgajiem AFAIK MySQL nesaprot, bet šīs vēlmes izklausās pēc masīvveidīgas konstrukcijas tipa kolekcijas no pārīšiem - grupas id (vai nosaukuma), vērtība. Padomāju un atcerējos, ka tādas lietas taču reizēm feikoja ar nosacīti sakodētu string mainīgo :) Vobše čerez dziļu ž to izdarīt var. Tātad man ir tabula persons: mysql> desc persons; +------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+-------+ | prs_id | int(11) | NO | PRI | NULL | | | prs_grp_id | int(11) | NO | | NULL | | | prs_name | varchar(10) | NO | | NULL | | | prs_value | varchar(100) | YES | | NULL | | +------------+--------------+------+-----+---------+-------+ 4 rows in set (0.01 sec) mysql> select * from persons; +--------+------------+----------+-----------+ | prs_id | prs_grp_id | prs_name | prs_value | +--------+------------+----------+-----------+ | 1 | 345 | Davis | NULL | | 2 | 345 | Lauris | NULL | | 3 | 765 | Maris | NULL | | 4 | 1 | Anete | NULL | +--------+------------+----------+-----------+ 4 rows in set (0.00 sec) Kā redzam visiem prs_value ir tukšs. Nu un tagad varam pieņemt, ka mums ir simbolu virkne spec formātā <grupas_id:vērtība,> Tad atliek tikai izkasīt ārā vērtību atbilstoši grupas id. Iespējams, ka to var izdarīt kaut kā īsāk, bet te nu ir mans variants :) Nu un, protams, ka šis var nestrādāt, ja vērtībā ir iekšā kols vai komats. mysql> set @str := '1:foo, 345:boo, 765:zoo,'; Query OK, 0 rows affected (0.00 sec) mysql> mysql> UPDATE persons -> SET prs_value = -> substr(@str, -> locate(concat(prs_grp_id, ':'), @str) + length(concat(prs_grp_id,':')), -> locate(',', @str, locate(concat(prs_grp_id, ':'), @str)) - locate(concat(prs_grp_id, ':'), @str) - length(concat(prs_grp_id, ':')) -> ); Query OK, 4 rows affected (0.03 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> select * from persons; +--------+------------+----------+-----------+ | prs_id | prs_grp_id | prs_name | prs_value | +--------+------------+----------+-----------+ | 1 | 345 | Davis | boo | | 2 | 345 | Lauris | boo | | 3 | 765 | Maris | zoo | | 4 | 1 | Anete | foo | +--------+------------+----------+-----------+ 4 rows in set (0.00 sec) Gints Plivna http://datubazes.wordpress.com/ P.S. Ja tā doma darīt, tad piprms ida arī jāliek kols, jo citādi 1: un 11: priekš id = 1 atradīs abos gadījumos un iespējams nepareizi. Tb stringā jāliek :1: vai :11:. Edited May 9, 2011 by Gints Plivna Quote Link to comment Share on other sites More sharing options...
basic Posted May 10, 2011 Report Share Posted May 10, 2011 (edited) Njā, šoreiz Gints ir pacenties izdomāt kārtīgu smadzeņlauzi :) To var tādā gadījumā, ja Tev tās vērtības foo, doo un boo jau ir bāzē kādā tabulā ar atbilstošo grupas id, vai kodu vai whatever kādu citu unikālu lauku, pēc kura tās var atlasīt. Šķiet, ka pirmā doma bija tā preizākā un realizācijā vienkāršākā: UPDATE persons, (SELECT 1 as grp_id, 'foo' as value UNION ALL SELECT 345, 'boo' UNION ALL SELECT 765, 'doo') src SET persons.prs_value=src.value WHERE persons.prs_grp_id=src.grp_id Edited May 10, 2011 by basic Quote Link to comment Share on other sites More sharing options...
uldozers Posted May 10, 2011 Report Share Posted May 10, 2011 Ir iespējams visus šo vaicājumus nosūtīt vienu pēc otra un, ja viss ok, tad commit, ja nē, tad - rollback. Vai šāda iespēja nederēs? Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted May 10, 2011 Report Share Posted May 10, 2011 Njā, šoreiz Gints ir pacenties izdomāt kārtīgu smadzeņlauzi :) Piekriitu ;) Bet jautaajums NAX vispar tas bija vajadziigs.. Neticu ka nebija citu risinajumu... Kam vispar domatas DB, ja laiku pa laikam japarlasa VISI dati .. Quote Link to comment Share on other sites More sharing options...
rpr Posted May 11, 2011 Report Share Posted May 11, 2011 uldozeram taisnība, šķiet ar tranzakcijām būtu prātīgāk. vineīgi mysql myisam tabulām nav tranzakciju. tad jāpāriet uz innodb. Quote Link to comment Share on other sites More sharing options...
Faks Posted May 17, 2011 Report Share Posted May 17, 2011 uz ātru roku piemers ! $x = mysql_qury("update xx (x) VALUES ('".$xs."') "); if(mysql_query($x)) { taisam nākamo update :) pec šada principa ceru ka saprati ideju :) tālak ar elseif un tamlīdzigi var darīt :) vēlu veiksmi :) } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.