2012-06-09 25 views
2

我有一個分類的網站...我試圖做一個SQL查詢,計算用戶過去7天發佈的廣告數量,但我有一個問題...SQL查詢,以保持「計數」已刪除的行

我試圖在用戶配置文件像這樣的例子來說明:[用戶名]已在過去7天發佈的30個廣告

這裏是我的sql查詢 - >

SELECT COUNT(*) 
FROM table_name 
WHERE user_id = '[user_id]' AND created_date > NOW() - INTERVAL 7 DAY 

所以在我的情況下,「table_name」包含所有來自所有廣告用戶和「user_id ='[user_id]'」我向用戶A展示他的廣告數量,並向用戶B展示他的廣告數量等等。

因此,此查詢適用於廣告數量正確的,但如果例如用戶輸入現場和DELETE的1,2或任何數量的他的廣告,這個數字將被「minused」從「[用戶名]在過去7天內已發佈30個廣告」

  1. 舉例來說,用戶在過去5天內發佈了20個廣告 - 正確的結果是[用戶名]在過去7天內有20個廣告
  2. 現在用戶進入網站並刪除了4個廣告 - 現在t他結果是[用戶名]發佈了最後7天

16個廣告有人可以幫我請,我能添加到查詢因此計數仍顯示廣告的正確數量(在我的案件20廣告),即使其中刪除了廣告..

謝謝 乾杯

+1

如果從數據庫中刪除所有已刪除添加的跟蹤,則SQL查詢無法知道它們。 – Andomar

+0

嗨。謝謝您的回答。是的,我也在想這個...我會思考一下什麼以及如何去做。感謝您的時間 – Vzlotea

回答

6

而不是刪除使用DELETE ... WHERE ...語句行,添加deleted列,並使用UPDATE聲明:

UPDATE ... SET deleted = 1 WHERE ... 

然後你的計數功能將不加修改地工作。

當然,您現在必須修復所有其他代碼,以不顯示已刪除的廣告。您可以通過將WHERE NOT deleted添加到所有其他查詢來完成此操作。您還可以創建一個僅顯示未被刪除的廣告的視圖,並更新您的代碼以查詢此視圖而不是原始表。

+0

感謝您的回答,您認爲將所有廣告放在表格中(因爲表格會更重和更重),或者我應該「離開」這個「功能」最近7天..?謝謝 – Vzlotea

+0

@Vzlotea:保持他們。除非您希望系統中有數以億計的廣告,否則出於性能方面的考慮,您可能永遠不需要刪除任何數據(儘管可能存在永久刪除數據的合法原因)。如果您擔心表現,請確保您瞭解**索引**的工作方式。缺少索引是查詢運行速度過慢的常見原因。如果遇到性能問題,可以(例如)刪除標記爲已超過一年的刪除行。 –

+0

非常感謝您的回答。我會做「刪除」專欄,並在閱讀更多內容和改進索引時使用您的建議。謝謝。 – Vzlotea

4

不是從系統中刪除廣告,而是添加一個「已刪除」標誌,或將它們移動到已刪除的表格中。這樣你永遠不會失去他們的記錄。

+0

謝謝你的回答,你認爲把所有的廣告放在桌子上是件好事(因爲桌子會變得越來越重),或者我應該在過去的7天裏「離開」這個「功能」。 。?謝謝 – Vzlotea

+0

正如Mark指出的那樣,我絕對建議保留它們。數據庫擅長使用索引搜索數據。如果表格成爲問題,那麼您可以根據年齡段來分割數據庫。這將爲您提供額外的好處,即能夠針對您的數據庫運行各種分析查詢,以確定需要推動哪些人推送更多的廣告,或者甚至更相關的廣告。最終,它只是給你更多的靈活性來保持它們。 – pickypg

+0

感謝您的回答。 – Vzlotea

2

沒有什麼可以添加到查詢來查找已刪除的數據。您需要而不是來刪除數據,但添加一個標記到用戶想要刪除的記錄到指示它已從顯示中刪除。

除了允許記錄被計數之外,它還具有附加優勢,如果用戶可以允許該用戶被允許恢復該廣告。

+0

謝謝你的回答。 – Vzlotea