ограничить запись в БД при добавлении новых записей

Хорошо, у меня есть таблица последних посещений и следующий код, который я использую для ввода записей в таблицу

if($user->is_logged_in() ){
$postid = $row['postid'];
$uid = $_SESSION['memberid'];
$stmt = "SELECT * FROM recent WHERE postid = :postid AND memberid = :memberid";
$stmt = $db->prepare($stmt);
$stmt->bindParam(':postid', $postid, PDO::PARAM_STR);
$stmt->bindParam(':memberid', $uid, PDO::PARAM_STR);
$stmt->execute();
$recentCount = $stmt->rowCount();
if(!$recentCount)){
$stmt = $db->prepare('INSERT INTO recent (postid,memberid) VALUES ( :postid,:memberid)');
$stmt->execute(array(
':postid' => $postid,
':memberid' => $uid
));
}
}

но дело в том, что я хочу ограничить записи, так как в расчете на одного пользователя в дБ должно быть только 50 записей. Предположим, что пользователь посещает новую тему, тогда, если в недавней таблице уже 50 записей для пользователя, тогда число 50 удаляется, а 49 становится 50. Надеюсь, вы поняли мою точку зрения?

Я просто имею в виду, что количество записей на одного пользователя не должно превышать 50.

0

Решение

Основываясь на вопросе и комментариях, я думаю, что вы можете сделать это следующим образом (вы не упомянули название поля даты, но для этого примера я предполагаю, что оно называется createdate):

if($user->is_logged_in() ){
$postid = $row['postid'];
$uid = $_SESSION['memberid'];
$stmt = "SELECT COUNT(*) FROM recent WHERE postid = :postid AND memberid = :memberid"; //let mysql count the rows
$stmt = $db->prepare($stmt);
$stmt->bindParam(':postid', $postid, PDO::PARAM_STR);
$stmt->bindParam(':memberid', $uid, PDO::PARAM_STR);
$stmt->execute();
$recentCount = $stmt->fetchColumn(); //fetch first column in first row, this will be the count result

if($recentCount >= 50)
{
$stmt2 = $db->prepare('DELETE FROM recent WHERE createddate = (select min(createddate) where memberid = :memberid)');
$stmt2->bindParam(':memberid', $uid, PDO::PARAM_STR);
$stmt2->execute();
}
$stmt = $db->prepare('INSERT INTO recent (postid,memberid) VALUES ( :postid,:memberid)');
$stmt->execute(array(
':postid' => $postid,
':memberid' => $uid
));

Извините, если синтаксис PDO неправильный, я не использовал его некоторое время. Я уверен, что вы можете сделать это сами. Но главное — это структура PHP-оператора if и SQL-запрос «удалить».

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]