Artenis Posted February 22, 2010 Report Share Posted February 22, 2010 Kā izskatītos kverijs, kur vajadzētu nodzēst katram lietotājam visus ierakstus, ja ierakstu skaits vienam userim pārsniedz 100, tobiš ja vairāk par 100 ierakstiem, tad lai nodzēš tam lietotājam visus ierakstus, kas vecāki par 100 un atstāj jaunākos 100. tas ir ja ir 103 ieraksti, tad nodzēš 3 ierakstus, kas virs 100. Atvainojos, par tik nesekarīgu skaidrojumu, bet varbūt kāds var palīdzēt! Paldies! Quote Link to comment Share on other sites More sharing options...
yeahz Posted February 22, 2010 Report Share Posted February 22, 2010 if ($ieraksti > 100) mysql_query("DELETE FROM table WHERE id=$userid LIMIT 100, $ieraksti ORDER BY jaunaakais"); cerams, ka pareizi Quote Link to comment Share on other sites More sharing options...
Artenis Posted February 22, 2010 Author Report Share Posted February 22, 2010 Gribētos to bez cikla izdarīt vai tā būu iespējams izdarīt? Jo būs daudz lietotāju. Quote Link to comment Share on other sites More sharing options...
waplet Posted February 22, 2010 Report Share Posted February 22, 2010 1. select count. 2.if count > 100 3. count - 100 4. delete from messages limit countnew order by id asc.. ta +- varetu but. Quote Link to comment Share on other sites More sharing options...
KillerBean Posted February 22, 2010 Report Share Posted February 22, 2010 bez cikla Tu vari mēģināt ar sub-query'iem. bet tik un tā vieglāk un ērtāk būtu ar ciklu, kas nolasa skaitu un izdzēš. vienīgi, nezinu, cik liela ātruma starpība būs, ja dzēšanas kveriju uzbūvēsi vienu lielu, nevis katram lietotājam savu. Quote Link to comment Share on other sites More sharing options...
2easy Posted February 22, 2010 Report Share Posted February 22, 2010 (edited) Gribētos to bez cikla izdarīt vai tā būu iespējams izdarīt? Jo būs daudz lietotāju. hmm, laikam tomēr vajadzēs ciklu, jo ir jāatrod katra individuālā usera vecākie ieraksti. anyway tā ir maintenance darbība, un tādas paņem vairāk laika ORDER BY + LIMIT http://dev.mysql.com/doc/refman/5.0/en/delete.html starpību/skaitu priekš LIMIT aprēķini atsevišķā kverijā tad sakārto tā, lai vecākie ieraksti ir pirmie un tos arī nodzēs (attiecīgo skaitu) tb 2x kveriji tikai (uz katru useri :D) EDIT: nu jā, ar codeza subselektiem jau ir savādāk... kruta, ko lai citu pasaka ;) Edited February 23, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
codez Posted February 23, 2010 Report Share Posted February 23, 2010 cikls parādās, ja jādzēš šādi ārā katram userim. Nedaudz paspēlējoties, sanāca šāds: userdata ------- id int uid int - user-a id DELETE FROM userdata WHERE id in (SELECT id FROM (SELECT *,IF(l.uid=@b,@a:=@a+1,@a:=0) as a,@b:=l.uid FROM userdata as l,(SELECT @a:=0) as t ORDER BY uid DESC ,id desc) as g WHERE a>=100); 1) SELECT selekto visu tabulu, aprēķinot katram, kurš ieraksts pēc kārtas tas ir atbilstošajam uid. 2) SELECT atlasa tikai tos, kuri ir 100 un vecāki pēc kārtas, sākot no jaunākā. 3) DELETE dzēš ārā visus, kuriem id atbilst ar 2. SELECTA selektotajiem. Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted February 23, 2010 Report Share Posted February 23, 2010 Manuprāt var vienkārši - ...LIMIT 100, 10000 Otro skaitli gan var izvēlēties pēc tā, cik tev ātri un cik daudz parādās tur ieraksti. Quote Link to comment Share on other sites More sharing options...
2easy Posted February 23, 2010 Report Share Posted February 23, 2010 mysqlprāt gan ir tikai dzēšamo rindu skaits 12.2.2. DELETE Syntax Single-table syntax: DELETE [LOW_PRIORITY] [QUICK] [iGNORE] FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted February 23, 2010 Report Share Posted February 23, 2010 ehh.. Nu labi. DELETE FROM tabula WHERE id IN (SELECT id FROM tabula WHERE nosacijumi LIMIT 100,10000) Quote Link to comment Share on other sites More sharing options...
codez Posted February 23, 2010 Report Share Posted February 23, 2010 (edited) Viņš tak prasa kveriju, kurš to izpildītu uzreiz visiem lietotājiem, nevis tikai vienam. Edited February 23, 2010 by codez Quote Link to comment Share on other sites More sharing options...
mounkuls Posted February 23, 2010 Report Share Posted February 23, 2010 Ir pamatots iemesls tam, kāpēc vajag dzēst visiem lietotājiem uzreiz? Nu tīri no admina loga laikam pārskatāmības dēļ tā varētu būt nepieciešamība. Bet savādāk, vai tad nepietiek ja dzēsīs katram lietotājam, pirms atrāda tam, kurš pieprasa? Viena liela bremze vs daudzas sīkas nemanāmas. Quote Link to comment Share on other sites More sharing options...
2easy Posted February 23, 2010 Report Share Posted February 23, 2010 imho, to darīs kkāds cron jobs 1x dienā (vismaz pēc tā izskatās) anyway man jau liekas, ka ciklā ar php taisot daudzus delete varētu nebūt īpaši daudz lēnāk nekā ar krutajiem codeza subselektiem. varētu atkal uzģenerēt testa datus un notestēt to performanci ;) Quote Link to comment Share on other sites More sharing options...
codez Posted February 23, 2010 Report Share Posted February 23, 2010 būtu forši redzēt performances datus. Quote Link to comment Share on other sites More sharing options...
2easy Posted February 23, 2010 Report Share Posted February 23, 2010 man arī interesētu, bet šobrīd laika pietiek tikai, lai paspamotu. grozies kā gribi, bet tāda testa uztaisīšanai, pašai testēšanai un secinājumu rakstīšanai kāda stunda paiet (ja visu ātri dara :D) 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.