Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оставляем в таблице только 50 записей
 
 автор: sidPR   (03.03.2006 в 16:32)   письмо автору
 
 

Как зделать такого рода хранение или удаление чтобы в таблице было только 50 поседних записей

   
 
 автор: Trianon   (03.03.2006 в 16:45)   письмо автору
 
   для: sidPR   (03.03.2006 в 16:32)
 

Если есть первичный ключ (обычно autoincrement -поле) или таймштамп, то можно так.
Взять последний актуальный ключ
last_id := select id from table order by id desc limit 50,1
И удалить всё, что раньше него.
delete from table from table where id < last_id

   
 
 автор: sidPR   (03.03.2006 в 16:59)   письмо автору
 
   для: Trianon   (03.03.2006 в 16:45)
 


require ("config.php"); 
$query = "SELECT * FROM $table ORDER BY id DESC LIMIT 10";
$last_id = "select id from $table order by id desc limit 10,1";

$last_id_dell = "delete from $table from table where id < $last_id";

Где ошибка ?

   
 
 автор: Trianon   (03.03.2006 в 17:19)   письмо автору
 
   для: sidPR   (03.03.2006 в 16:59)
 

Тогда уж как-то так...

$id = 'ИмяПоляПервичногоКлюча";
$table = 'ИмяТаблицы";
$lim = 10; // сколько записей оставить
$res = @mysql_query( "SELECT $id FROM $table ORDER BY $id DESC LIMIT $lim, 1"); 
if($res != 0 && mysql_num_rows($res) > 0)
{
     $res = mysql_fetch_array($res);
     $last_id = $res[$id];
     $res = @mysql_query( "DELETE FROM $table FROM $table WHERE $id < $last_id"); 

   
 
 автор: sidPR   (03.03.2006 в 23:28)   письмо автору
 
   для: Trianon   (03.03.2006 в 17:19)
 

к сожелению не работает :(

$query = "SELECT * FROM $table ORDER BY id DESC LIMIT 11";
$res = @mysql_query( "SELECT id FROM $table ORDER BY id DESC LIMIT 10, 1"); 
if($res != 0 && mysql_num_rows($res) > 0) 

     $res = mysql_fetch_array($res); 
     $last_id = $res['id']; 
     $res = @mysql_query( "DELETE FROM $table FROM $table WHERE id < $last_id"); 

   
 
 автор: sidPR   (04.03.2006 в 17:23)   письмо автору
 
   для: sidPR   (03.03.2006 в 23:28)
 

А можноже навeрно както проше зделать подсчитать кол-во записей в таблице к примеру записей 150 значит удилить 100 с конца ну и так далее ?

   
 
 автор: cheops   (05.03.2006 в 12:53)   письмо автору
 
   для: sidPR   (04.03.2006 в 17:23)
 

Конечно, для этого можно воспользоваться запросом
DELETE FROM $table ORDER BY id DESC LIMIT 100

где 100 вычисленное значение, которое необходимо удалить с конца.

   
 
 автор: sidPR   (05.03.2006 в 14:02)   письмо автору
 
   для: cheops   (05.03.2006 в 12:53)
 

а из базы как получить циферку полей скоко там ?

   
 
 автор: cheops   (05.03.2006 в 20:03)   письмо автору
 
   для: sidPR   (05.03.2006 в 14:02)
 

Для этого следует воспользоваться запросом
SELECT COUNT(*) FROM $table

   
 
 автор: sidPR   (06.03.2006 в 01:10)   письмо автору
 
   для: cheops   (05.03.2006 в 20:03)
 


$querz = "SELECT COUNT(*) FROM $table";  
$ctg = mysql_query($querz); 
$total = mysql_result($ctg,0);
if($total >= 10){
$delzz = "DELETE FROM $table ORDER BY id DESC LIMIT 10";
}

вот нехочет удалять хоть убейте тотал вроде выводит цифру ... =\ч что неправильно ?

   
 
 автор: sidPR   (06.03.2006 в 01:10)   письмо автору
 
   для: cheops   (05.03.2006 в 20:03)
 


$querz = "SELECT COUNT(*) FROM $table";  
$ctg = mysql_query($querz); 
$total = mysql_result($ctg,0);
if($total >= 10){
$delzz = "DELETE FROM $table ORDER BY id DESC LIMIT 10";
}

тотал вроде выводит цифру а удалять чет нехочет нефига :(

   
 
 автор: cheops   (06.03.2006 в 13:48)   письмо автору
 
   для: sidPR   (06.03.2006 в 01:10)
 

Попробуйте после строки
<?php
  $ctg 
mysql_query($querz);
?>

поставить проверку
<?php
  $ctg 
mysql_query($querz);
  if(!
$ctg) exit(mysql_error());
?>

   
 
 автор: Trianon   (06.03.2006 в 11:41)   письмо автору
 
   для: cheops   (05.03.2006 в 12:53)
 

Разве в команде DELETE ... ORDER BY ... можно использовать модификатор DESC ?

   
 
 автор: cheops   (06.03.2006 в 13:47)   письмо автору
 
   для: Trianon   (06.03.2006 в 11:41)
 

Конечно, везде, где используется конструкция ORDER BY, допустимы ключевые слова DESC и ASC.

   
 
 автор: Trianon   (07.03.2006 в 10:17)   письмо автору
 
   для: cheops   (06.03.2006 в 13:47)
 

Да... лопухнулся я... В MySQL мануале синтаксис SELECT и DELETE в этом пункте отличаются. Я и решил, что удаление кроме как в прямом порядке невыполнимо.

   
 
 автор: Trianon   (06.03.2006 в 13:02)   письмо автору
 
   для: sidPR   (03.03.2006 в 23:28)
 

<?php include 'config.inc.php';
  
$table 'mytab4'// имя таблицы
  
$id 'id'// имя поля с первичным ключом
  
$lim 50// сколько записей оставить
  
if($lim)
  {
    
$res = @mysql_query"SELECT $id FROM $table ORDER BY $id DESC LIMIT $lim, 1");
    if(
$res != && mysql_num_rows($res) > 0)
    {
       
$res mysql_fetch_array($res);
       
$query "DELETE $table FROM $table WHERE $id <= "$res[$id];
    }
    else 
$query "";
  }
  else 
$query "DELETE FROM $table";

  if(
$query != "")
  {
       
$res = @mysql_query$query);
       if(!
$res)
            echo 
" delete error: ".mysql_error();
       else
            echo 
mysql_affected_rows() . " rows deleted";
  }
  else echo 
"no actions performed";
?>

   
 
 автор: sidPR   (07.03.2006 в 09:32)   письмо автору
 
   для: Trianon   (06.03.2006 в 13:02)
 

Спасибо огромное всем !! очень признателен за помощь!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования