2013-01-19 33 views
0

我有一個表3列(imageId,reportId,計數器) 表的主鍵是列(imageId,reportId) 現在我想計數器列將是計數器,我試圖插入一對(imageId,reportId)多少次。作爲一個計數器在SQL自動增量

例如,如果我有圖像「x.png」,100人報告此圖像包含色情內容, 我希望表格中的值(「x.png」,「pornography」)櫃檯專欄有100個。 當下一個人將這個圖像報告爲色情我想要計數器爲101等等。

我該怎麼做這樣的事情?

謝謝

回答

2

在這種情況下,最好將新行添加到您的表中。這意味着您可以提供一個視圖,可以根據需要選擇計數。

每份報告新行的好處是還允許用戶添加自定義消息等

的能力 - 更新

一些細節在這裏的觀點在這裏http://dev.mysql.com/doc/refman/5.0/en/view-syntax.html

在心臟它查詢只會像

SELECT imageId, reportId, count(reportId) as count FROM training.reporttable group by imageId, reportId 

這裏一個基本的查詢是一個基本的例子:

Selecting counts of fields

注意,我堅持你的榜樣的數據,但reportId和圖像標識應該歸

+2

同意,沒有理由過度地解除標準化這個設置。當用戶提交表單時,插入一條記錄。不要用數據報告的概念來污染數據的存儲。獨立存儲所有記錄並創建數據視圖以進行報告。 – David

+0

我不需要任何來自用戶的cutmon消息,我需要計數器僅用於圖像數據庫的管理員,以具有某種優先級,哪個圖像被報告最多 –

+0

@ user1851268正如David所說,最好解耦來自您的數據的業務邏輯。我只是提供了另一個可以通過這樣做獲得的小好處 – AlanFoster

2

使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT IGNORE INTO table (imageId, reportId, counter) VALUES (1, 1, 0) ON DUPLICATE KEY UPDATE SET counter=counter+1 

您也可以在計數器列的默認值設定爲0,使用這個:

INSERT IGNORE INTO table (imageId, reportId) VALUES (1, 1) ON DUPLICATE KEY UPDATE SET counter=counter+1 
+0

tnx,我想到類似這樣的東西,但對此沒有任何想法 –