2012-03-09 78 views
1

只是好奇看到你的意見,因爲我正在開發一個論壇腳本旁邊的共存CMS - 我有ACL等排序。論壇軟件應該審覈刪除主題/帖子還是簡單地隱藏?

但不知道是否是最好做DELETE FROM ...(在刪除記錄)......或者只是做一個UPDATE設置爲1列(bool) - 它可以隱藏它(這樣看起來刪除)。

PS:只有那些誰我相信有機會獲得審覈工具

回答

3

這完全取決於你平時多麼重要是要刪除的數據,或者你想和事故如何寬容的問題。

我喜歡使用的方法是爲您想要刪除的項目提供克隆數據庫。刪除時,將所選行的內容複製到新數據庫,然後刪除。在系統中添加額外的「已刪除」文章或項目只會佔用更多空間,並最終會減慢查詢速度(可能)。

一旦你填滿你的「刪除文章」數據庫,運行一個轉儲,存檔,截斷。

比方說,你有數據庫CMS與表叫,你要存儲刪帖文章中,我們將創建一個具有相同的表結構完全相同的數據庫:

CREATE DATABASE `deleted`; 
CREATE TABLE deleted.cmsarticles LIKE CMS.ARTICLES; 

在你的PHP腳本多數民衆贊成刪除內容你會做這樣的事情:

//GRAB THE ID OF THE ARTICLE YOU ARE DELETING, MAKE SURE TO SANITIZE! 
$article_id=$_POST['id']; 
if(is_numeric($article_id) { 
    $dbconnect=databaseFunction(); 
    $result=$dbconnect->query("SELECT `row1`,`row2` FROM `ARTICLES` WHERE `id`=$article_id"); 
    if($result->num_rows!=0) { 
     $row=$result->fetch_array(MYSQLI_ASSOC); 
     //Open new connection to deleted database 
     $dbconnect2=otherDBFunction(); 
     $dbconnect2->query("INSERT INTO `cmsarticles`(row1,row2) VALUES ({$row['row1']},{$row['row2']}"); 
     $dbconnect->query("DELETE FROM `ARTICLES` where `id`={$_POST['id']}"); 
    } 
} 
+0

你的方法看起來有趣,將是很好,如果你能提供一些例如PHP/MySQL代碼以獲得更好的理解。 :) – user962026 2012-03-10 16:48:03

+0

我更新了我的答案,包括一個例子。 – 2012-03-12 16:47:45

2

你的直覺是正確的。有時您想要「取消刪除」帖子,或者參考已刪除帖子的內容。想象一下,如果有人對他人的生活發佈威脅,你想從視圖中刪除它,但也想記錄它,如果事情升級,與警方分享。

一種常用的方法是在表中添加DATETIME列, deleted_at。此列將爲NULL,直到您「刪除」一篇文章,此時它只是獲得UPDATEd與當前日期和時間。然後很容易只顯示未被刪除的記錄,例如SELECT ... WHERE deleted_at IS NULL

如果性能成爲一個問題(也可能不會)或磁盤大小不那麼你可以偶爾修剪刪帖,比如:

DELETE FROM posts 
WHERE 
    # DELETE all rows that were "deleted" more than a year ago 
    COALESCE(deleted_at, NOW()) < NOW() - INTERVAL 1 YEAR 
;