2016-07-26 4 views
0

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

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 записей должны быть в db. предполагая, что пользователь посещает новую тему, а затем, если в последней таблице для пользователя уже записано 50 записей, тогда число 50 удаляется, а запись 49 - 50. Надеюсь, вы поняли мою точку зрения?

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

+0

так что проверьте, что $ recentCount <50, а если нет, удалите самую старую строку. Затем продолжайте и делайте вставку – ADyson

+0

, да, как выглядит запрос на удаление? для удаления самой старой строки – lalthung

+0

Я предполагаю, что postid является значением автоинкремента, а это означает, что самое низкое значение будет самым старым. Поэтому возможно что-то вроде 'DELETE FROM recent, где postid = (SELECT min (postid) из последнего, где memberid =: memberid)' Если postid не создается автоматически, возможно, у вас есть поле даты, которое вы можете использовать (дата создания или что-то еще)? – ADyson

ответ

0

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

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 if и «delete» SQL.

+0

dont sems для работы с запросом – lalthung

+0

ну, вы изменили его, чтобы использовать правильное имя вашего поля даты? Вы проверяли, что в этом поле даты есть правильные данные? Я заметил, что ваша вставка не содержит ничего, что бы установить содержимое этого поля, поэтому, если СУБД автоматически не установит значение по умолчанию, вам нужно убедиться, что в ней есть текущая дата/время. – ADyson

+0

'if ($ recentCount> = 2) { $ stmt = "УДАЛИТЬ ИЗ последние WHERE date = (SELECT MIN (date) WHERE memberid =: memberid)"; $ stmt = $ db-> prepare ($ stmt); ' $ stmt-> bindParam (': memberid', $ uid, PDO :: PARAM_STR); $ stmt-> execute(); } elseif (! $ RecentCount) { $ stmt = $ db-> prepare ('INSERT INTO recent (postid, memberid) VALUES (: postid,: memberid)'); \t \t \t \t \t $ stmt-> выполнить (массив ( \t \t \t ': сообщения дан' => $ сообщения дан, \t \t \t ': MemberId' => $ UID \t \t \t \t \t \t)); } – lalthung