2016-07-26 69 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