Как ограничить объем данных для каждого пользователя в таблице MySQL и автоматически удалять самые старые данные

-4

Я создаю веб-приложение, в котором хочу сохранить и отобразить 10 самых последних страниц, просмотренных пользователем для пользователя, и я могу придумывать каждый раз, когда пользователь просматривает страницу, страница будет вставлять данные в таблицу MySQL называется "Recentview", затем я буду вызывать данные и отображать их как недавно просмотренные страницы в пользовательском интерфейсе.

Теперь проблема в том, что я хочу ограничить количество записей для каждого пользователя до 10 в таблице MySQL, а когда пользователь посетил 11-ю страницу, таблица должна автоматически удалить самые старые данные для этого конкретного пользователя, поэтому всегда должно быть максимальное из 10 записей для каждого пользователя внутри таблицы.

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

До сих пор здесь находится код PHP:

<?php
$con = mysqli_connect('localhost','root','','my_db');

$email= $_COOKIE['email'];

$recentsql = "INSERT INTO recent (email, page) VALUES ('email', 'page1')";
$recentquery = mysqli_query($con, $recentsql);

$countsql = "SELECT COUNT(*) FROM recent WHERE email='$email'";
$countquery = mysqli_query($con,$countsql);
$countrow = mysqli_fetch_array($countquery);
$count = $countrow[0];

if ($count > 10) {
//php codes here to delete the oldest entries for this particular user($_COOKIE['email'])//
//I could not figure out what is the code to do this task, please help//
}

?>

Все советы и рекомендации очень ценятся. Спасибо

Хорошо, прошу прощения, если мой вопрос не очень ясен, вот пример того, как выглядит таблица MySQL: * Я классифицировал свой идентификатор пользователя по своему адресу электронной почты

PID   email             recentpage
1 user1@user1.com page1
2 user1@user1.com some other page
3 user1@user1.com other page
4 user1@user1.com page2
5 user1@user1.com some more page
6 user1@user1.com more page
7 user1@user1.com pages
8 user1@user1.com different page
9 user1@user1.com still different page
10 user1@user1.com page in the web

11 user2@user2.com page1
12 user2@user2.com other page
13 user2@user2.com still different page

поэтому я хочу установить лимит для каждого пользователя (т.е. user1@user1.com и user2@user2.com и т.д.) только для 10 последних данных в таблице, и если они посещают другую новую страницу, она удалит самую старую в этом случае для user1@user.com, "page1" и вставьте самую новую посещенную страницу в таблицу, надеюсь, что это сделает мой вопрос более ясным. спасибо для помогает.

спросил(а) 2014-12-12T07:36:00+03:00 5 лет, 10 месяцев назад
0
70

Я не уверен на сто процентов, если я получу то, что вы хотите, но я думаю, что это сделало бы это:

<?php
$con = mysqli_connect('localhost','root','','my_db');

$email= $_COOKIE['email'];

$countsql = "SELECT COUNT(*) FROM recent WHERE email='$email'";
$countquery = mysqli_query($con,$countsql);
$countrow = mysqli_fetch_array($countquery);
$count = $countrow[0];

if ($count == 10) {
$deletesql = "DELETE FROM 'recent' WHERE 'id' = (SELECT 'id' FROM (SELECT id FROM 'recent' WHERE 'email' = '$email' ORDER BY 'id' DESC LIMIT 1) as t)";
$deletesql_res = mysqli_query($con, $deletesql);
}

$recentsql = "INSERT INTO recent (email, page) VALUES ('email', 'page1')";
$recentquery = mysqli_query($con, $recentsql);
?>

ответил(а) 2014-12-12T07:45:00+03:00 5 лет, 10 месяцев назад
58

Вы можете использовать подзапрос, чтобы удалить все, кроме 10 последних писем


$query = "delete from recent
where email = '$email'
and id not in (
select id from recent
where email = '$email'
order by id desc limit 10
)";

ответил(а) 2014-12-12T07:43:00+03:00 5 лет, 10 месяцев назад
42

Вы должны периодически запускать пакетное задание, и оно должно быть доступно для удаления старых данных

ответил(а) 2014-12-12T08:41:00+03:00 5 лет, 10 месяцев назад
41

Если в вашей таблице есть счетчики счетчиков, вы можете сохранить последние 10, удалив $ count - 10

$limit = $count-10    ;
$deletesql = "DELETE * from recent ORDER by id LIMIT $limit";
$deletequery = mysqli_query($con,$deletesql);

ответил(а) 2014-12-12T07:54:00+03:00 5 лет, 10 месяцев назад
41

Вы можете использовать следующий запрос, чтобы показать 10 последних страниц, не удаляя все предыдущие записи. В id запроса - первичный ключ вашей таблицы.

SELECT * FROM recent WHERE email='$email' ORDER BY id DESC LIMIT 10

ответил(а) 2014-12-12T07:40:00+03:00 5 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема