2013-09-15 3 views
0

я вставить в таблицу в любое время, когда пользователь открывает какой-либо пост на моем сайте, на этом пути им получить в режиме реального времени «Что случилось на сайте»Удалить старые строки в таблице, если максимальное значение превышено

mysql_query("INSERT INTO `just_watched` (`content_id`) VALUES ('{$id}')"); 

но теперь проблема, потому что они имеют более 100 тыс. хитов каждый день, это 100 тыс. новых строк в этой таблице каждый день, есть способ ограничить таблицу до 100 строк, а если max превышен, удалите старые 90 и вставьте снова или что-то в этом роде, не знаю, как это сделать

мой стол just_watched

ID - content_id

ID INT (11) - AUTO_INCREMENT
content_id INT (11)

+1

Моя идея состояла бы в том, чтобы подсчитать все строки в таблице и, если она больше 100, вы удаляете старейшую перед вставкой новой. –

+2

Напишите сценарий, который удаляет все записи старше сегодняшнего дня. И запустить его на cron каждый день, например. –

+0

mysql_ * устарел, вместо этого используйте PDO или MYSQLi. –

ответ

1

Самый простой способ, который появился в моей голове, - использовать php-логику для удаления и вставки вашей информации. Затем каждый раз, когда пользователь открывает новый пост, вы затем добавляете счетчик базы данных. (Это вы уже делаете)

Новый материал приходит сюда

Введите контроль перед вставкой, то есть, прежде чем что-либо вставлена ​​вы первый сосчитать все строки, если она не превышает 100 затем добавьте новую строку.

Если оно превышает 100 строк, то перед тем, как вставить новую строку, сначала сделайте инструкцию delete, а затем добавьте новую строку.

Пример (Судо код):

$sql = "SELECT COUNT(*) FROM yourtable"; 
$count = $db -> prepare($sql); 
$count -> execute(); 

if ($count -> fetchColumn() >= 100) { // If the count is over a 100 
    ............... //Delete the first 90 leave 10 then insert a new row which will leave you at 11 after the delete. 
} else { 
    .................. // Keep inserting until you have 100 then repeat the process 
} 

More information on counting here.Then some more information on PDO here.

Надеется, что это помогает :)

удачи.

Also information on how to set up PDO if you haven't already.

Что я буду делать? :

В 00:00 каждую ночь запускается задание cron, которое удаляет все строки за последний день. Но это лишь некоторые советы. Хороший.

0

Используйте этот запрос для удаления старых строк, за исключением последних 100 строк:

DELETE FROM just_watched where 
ID not in (SELECT id fromjust_watched order by ID DESC LIMIT 100) 

Вы можете запустить его CRON за каждый n период, когда (n = часы или минуты или любые)

0
$numRows = mysql_num_rows(mysql_query("SELECT ID FROM just_watched")); 
if ($numRows > 100){ 
mysql_query("DELETE FROM just_watched LIMIT 90"); 
} 
mysql_query("INSERT INTO `just_watched` (`content_id`) VALUES ('{$id}')"); 

Я думаю, это должно работать нормально.

0

Вы можете получить количество строк в таблице с:

$size = mysql_num_rows($result); 

С размером таблицы, вы можете проверить, если это становится на большой, а затем удалить 90 строк:

// Get 90 lines of code 
$query = "Select * FROM just_watched ORDER BY id ASC LIMIT 90"; 
$result = mysql_query($query); 
// Go through them 
while($row = mysql_fetch_object($result)) { 
    // Delete the row with the id 
    $id = $row['id']; 
    $sql = 'DELETE FROM just_watched 
    WHERE id=$id'; 
} 

Другим способом было бы просто удалить старую строку, если вы добавите новую строку в таблицу. Единственная проблема заключается в том, что если что-то застрянет, таблица может стать большой.

0

Вы можете использовать

DELETE FROM just_watched ORDER BY id DESC LIMIT 100, 9999999999999999; 

Таким образом, это будет удалить все строки из смещения 100 к большому количеству (на конец таблиц). если вы всегда запускаете этот запрос, прежде чем вставлять новый, тогда он выполнит эту работу для вас.

Смежные вопросы