ray Posted August 16, 2007 Report Posted August 16, 2007 Vai ir iespējams šo vaicājumu/php skriptu optimizēt? $query = "SELECT * FROM tabula WHERE lauks = 1"; $result = mysql_query($query); while($row = mysql_fetch_array($result) { $query_2 = "UPDATE tabula SET lauks = 0 WHERE id = ".$row["id"].""; mysql_query($query_2); }
dmitriy Posted August 16, 2007 Report Posted August 16, 2007 (edited) ja, piem šita: $query = "SELECT * FROM tabula WHERE lauks = 1"; $result = mysql_query($query); $sql = ''; while($row = mysql_fetch_array($result) { $sql .= 'id = \''.$row['id'].'\' OR '; } if ($sql != '') { $sql = substr($sql, 0, -3); $query_2 = 'UPDATE tabula SET lauks = 0 WHERE '.$sql; mysql_query($query_2); } Edited August 16, 2007 by dmitriy
v3rb0 Posted August 16, 2007 Report Posted August 16, 2007 (edited) $result = mysql_query('SELECT * FROM tabula WHERE lauks = 1'); $ids = array(); while($row = mysql_fetch_array($result)) $ids[] = $row["id"] if(count($ids) > 0) mysql_query('UPDATE tabula SET lauks = 0 WHERE id in('.join(','$ids).')'); Edited August 16, 2007 by v3rb0
andrisp Posted August 16, 2007 Report Posted August 16, 2007 Es kaut ko nesaprotu, vai arī vienkārši šādi: UPDATE tabula SET lauks = 0 WHERE lauks = 1
Delfins Posted August 16, 2007 Report Posted August 16, 2007 dmitriy un v3rbo varianti ir potenciālās vaboles - izkritīs uz max-sql-length. Es pat teiktu topika autora variants pareizs, ja vien vajag darīt kaut ko pa vidu PHP-specifisku (a ja nu `izlido` ārā kaut kas) Vai tiešām no SQL pamatiem nevar atcerēties primitīvos vaicājumus? Update taisa ne tikai pēc id, un var rēķināt uzreiz i visu ko citu pārveidot. Jebkurā skolā/e-bookā to māca.
andrisp Posted August 16, 2007 Report Posted August 16, 2007 Delfins, par kādām "skolām" tu runā ? Tādām īstām no ķieģeliem un cementa ? :)
v3rb0 Posted August 16, 2007 Report Posted August 16, 2007 diez vai šinī gadījumā ir tik daudz datu, ka ar idiem var iedzīvoties max sql garumā, un ja nu tomēr, tad pieliks kaunteri, kas limitēs cik idus vienā piegājienā apstrādāt.
andrisp Posted August 16, 2007 Report Posted August 16, 2007 v3rb0, bet vai ir jēga tā visu sarežģīt ? Protams, ja pa starpām vēl (kā jau Delfins norādīja) kaut kas jādara, ko var tikai ar PHP.
Delfins Posted August 16, 2007 Report Posted August 16, 2007 diez vai šinī gadījumā ir tik daudz datu, ka ar idiem var iedzīvoties max sql garumā A tu padomā no sql optimaizera puses.. ko tu vinam baro un kāds būs `execution plan` PS: par to sql-garumu - es arī vienreiz tā domāju, līdz iestājās šis brīdis :) Tad nākas visu pārtaisīt.
v3rb0 Posted August 16, 2007 Report Posted August 16, 2007 kādā ziņā sarežģīti? man šītā pat liekas vienkāršāk.. viens kverijs - dabū kaut kādus idus; otrs kverijs - izmantojot pirmā kverija rezultātu. iepīt "dauzus otros kverijus" iekš pirmā kverija rezultāta fečošanas taisi ir piņķerīgak, ja vēlāk vajag kaut ko pārtaisīt pa 180 grādiem, vai arī uzrodas vēl trešais kverijs.
bubu Posted August 16, 2007 Report Posted August 16, 2007 Drīkst uzzināt, ar ko jūsu cikli ir labāki par andra vienu updeitu?
v3rb0 Posted August 16, 2007 Report Posted August 16, 2007 nu vismaz es nepamanīju, ka šis vienu un to pašu tabulu grib updeitot. padomāju ka ja prasa, tad prasa kaut ko sarežģītāku.. eh.
Delfins Posted August 16, 2007 Report Posted August 16, 2007 v3rb0, webā pieturies pie viedokļa - jo īsāk, jo labāk. Un arī nevajag skriet pa priekšu izdomāt hvz kādus algoritmus, ja tie nav vēl paredzēt. Kad vajadzēs, vot tad arī uztaisīs.
Aleksejs Posted August 16, 2007 Report Posted August 16, 2007 Pirmajā SQLā pietiek tikai ar atgrieztiem id, manuprāt. Tātad: SELECT id FROM tabula WHERE lauks = 1
Recommended Posts