Autor Zpráva
Levelson
Profil *
Pro CRON potřebuju vytvořit jeden příkaz, ale nějak tápu :(...

Mám tabulku o sloupcích:
id, id_uzivatele, zaznam, cas, ip

Každému uživateli chci povolit maximálně 100 záznamů...

A tudíž potřebuju vytvořit příkaz mazající všechny záznamy nad 100
všem uživatelům najednou s tím, že se smažou ty nejstarší záznamy.
RockFire
Profil
$vyber_uzivatele = mysql_query("SELECT * FROM uzivatele WHERE id = 'XX'");
$pocet_zaznamu = mysql_num_rows($vyber_uzivatele);
   if($pocet_zaznamu > 100)
   {
   $smaz = $pocet_zaznamu - 100;
   $smazat = mysql_query(DELETE FROM uzivatele WHERE id = 'XX' LIMIT $smaz ORDER BY id DESC);
      if($smazat)
      {
       echo '<p><strong>Smazání proběhlo úspěšně</strong></p>';
      }
   }


Doufám, že jsem problém správně pochopil a že to bude fungovat, poněvadž si nejsem 100% jist funkčností ORDER BY id DESC v příkazu DELETE.

Moderátor Alphard: Váš dotaz smaže ty nejnovější záznamy a navíc z tabulky uzivatele (katastrofě zabrání jen where id = 'XX', varuji před slepým kopírováním tohoto kódu.
Alphard
Profil
Levelson:
Největší problém vidím v mazání všem uživatelům najednou, kolik jich tak řádově je? (jde mi o to, jestli je přijatelný cyklus, nebo to musí být na úrovni sql)
Levelson
Profil *
Aplikace je na začátku nasazení a nedokážu přesně odhadnou její provozní objemnost.

Tipuju že půjde časem o max. 10-20.... uživatelů najednou...

Teď mně napadá možná by to zjednodušil další sloupec (pocet+1) při každém novém záznamu by připočetl hodnotu 1.... a dále by se to mohlo využít v podmíkách?
Alphard
Profil
Levelson:
Tipuju že půjde časem o max. 10-20.... uživatelů najednou...
Tak to bych se nebál spuštět:

$result = mysql_query ("select id from uzivatele");
while ($zaznam = mysql_fetch_assoc ($result))
  mysql_query ("delete from vase_tabulka where id_uzivatele = {$zaznam['id']} order by id desc limit 100, 10000");


Jednou za týden nebo měsíc to nebude problém.
Levelson
Profil *
Díky Alphard ! fikané s tím polem...
Do jakých počtů uživatelů by to bylo asi přijatelné???
záznamy budou textové udaje o max cca 300 bytech
RockFire
Profil
Alphard: Díky moc, tak to jsem tomu zase dal.
Alphard
Profil
Levelson:
Netroufám si moc hádat. Ale do stovky snad ok. Nejde o velikost, ale o počet. Dotazů má být pokud možno co nejméně, některé hostingy mají navíc nastavený limit. Na administrační stránce spouštěné cronem si můžete tovolit více, ale všeho s mírou. Nastavte cron na dobu, kdy servery nejsou moc vytížené a kdyby byly problémy, tak se to bude muset udělat jinak (tím myslím buď spuštět po dávkách nebo napsat složitější dotaz, který to udělá najednou; ale ani jedno nebude jednoduché).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: