2010-03-02 23 views
0

我在我的社交網絡上有一個簡單的插入查詢,允許用戶在文本區域中輸入文本並將其輸出到他們的個人資料頁面上。他們可以選擇刪除,並按預期將狀態標記爲已刪除,並刪除更新。問題是,如果他們只是輸入一個新的,而不刪除已經存在的(我希望他們能夠做到的)。從技術上說,他們沒有刪除以前的提交,並重新加載與他們的舊帖子的頁面。當插入新更新時更新以前的狀態爲死亡

我想讓它保留在他們可以選擇刪除的地方,並在db中將其標記爲已死(但現在是這樣),但是當他們寫入新文件而不刪除時,它會自動將之前的提交標記爲已死。

我有這個在我刪除腳本:

$query = "UPDATE `UserUpdates` SET `status` = 'dead' WHERE `id` = '".$UserUpdates."'"; 
$request = mysql_query($query,$connection); 

我是新來的,但我知道什麼,我需要做的邏輯,我只是​​不知道所需的語法/功能。

回答

0

你就不能保持所有的狀態記錄,只是決絕的最新一個作爲自己當前的狀態(在具有最高ID記錄)?當你添加一個新的時候,你並不需要將它們標記爲已死,因爲無論如何你只需要拉取最新的記錄。

+0

這就是我現在正在做的,問題是,如果有人只是寫一個新的帖子,而不是刪除現有的帖子,則前一個仍然被設置爲活動的,所以當他們刪除新的帖子時,前一個顯示,在那裏,因爲我想那裏什麼也沒有,當他們刪除最近的一個。 – 2010-03-02 16:30:50

+1

當帖子被刪除時,將其標記爲「已死」。 然後,當您查看最新狀態時,請檢查它是否被標記爲「已死」,如果已將狀態設置爲無效。 – Crafton 2010-03-02 16:35:04

+0

您可以限制您的查詢爲每個用戶1次更新(按時間排序,然後按用戶分組),然後您將只擁有最新狀態。 – casraf 2010-03-02 16:39:56

0

插入新狀態後,爲什麼不爲當前狀態運行刪除腳本?我假設你知道當前狀態ID(我們稱之爲$c_status_id)。

INSERT INTO statuses VALUES (...) 
DELETE FROM statuses WHERE id = "$c_status_id" 

這樣,您只有最新的狀態更新。

1

這聽起來像是你將不得不運行2個查詢:

  1. 更新UserUpdates紀念現有死
  2. 如果你正使用InnoDB插入新行

或另一個事務引擎,你可以用「BEGIN TRANSACTION」和「COMMIT」來包裝這兩個更新,以便將這兩個更新作爲單個原子操作來執行。

爲了簡化您的應用程序,可以編寫存儲過程,以便您的所有應用程序都需要調用單個存儲過程。