2016-07-26 40 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 where postid =(SELECT min(postid)from recent where 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」語句和「刪除」SQL的結構。

+0

不要sems正在查詢 – lalthung

+0

嗯,你有沒有改變它使用你的日期字段的正確名稱?你有沒有檢查日期字段中有正確的數據?我注意到你的插入不包含任何可以設置該字段內容的東西,所以除非DBMS自動將它設置爲默認值,那麼你需要確保它具有當前的日期/時間 – ADyson

+0

'if ($ recentCount> = 2)$ {stmt =「DELETE FROM recent WHERE date =(SELECT MIN(date)WHERE memberid =:memberid)」; $ stmt = $ db-> prepare($ stmt);' $ stmt-> bindParam(':memberid',$ uid,PDO :: PARAM_STR); $ stmt-> execute(); (INSERT INTO recent(postid,memberid)VALUES(:postid,:memberid)');} elseif(!$ recentCount){ $ stmt = $ db-> \t \t \t \t $ \t stmt->執行(陣列( \t \t \t ':帖子ID'=> $帖子ID, \t \t \t ':MEMBERID'=> $ UID \t \t \t \t \t \t)); } – lalthung