我有一个包含 3 列(imageId、reportId、counter)的表,表的主键是列(imageId、reportId)现在我希望计数器列是我尝试插入该对的次数的计数器(图像 ID,报告 ID)。
例如,如果我有图像“x.png”并且有 100 人报告该图像包含色情内容,我希望表中具有值 (“x.png”、“色情”) 的行在计数器中有 100柱子。当下一个人将此图像报告为色情内容时,我希望计数器为 101,依此类推。
我怎么能做这样的事情?
谢谢你
我有一个包含 3 列(imageId、reportId、counter)的表,表的主键是列(imageId、reportId)现在我希望计数器列是我尝试插入该对的次数的计数器(图像 ID,报告 ID)。
例如,如果我有图像“x.png”并且有 100 人报告该图像包含色情内容,我希望表中具有值 (“x.png”、“色情”) 的行在计数器中有 100柱子。当下一个人将此图像报告为色情内容时,我希望计数器为 101,依此类推。
我怎么能做这样的事情?
谢谢你
利用INSERT ... ON DUPLICATE KEY UPDATE
INSERT IGNORE INTO table (imageId, reportId, counter) VALUES (1, 1, 0) ON DUPLICATE KEY UPDATE SET counter=counter+1
您还可以将 counter 列的默认值设置为 0 并使用:
INSERT IGNORE INTO table (imageId, reportId) VALUES (1, 1) ON DUPLICATE KEY UPDATE SET counter=counter+1
在这种情况下,最好向表中添加新行。这意味着您可以在其顶部提供一个视图,该视图可以根据需要选择计数。
每个报告新行的好处是还允许用户添加自定义消息等。
- 更新
这里有一些关于视图的细节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
这是一个基本示例:
请注意,我坚持使用您的示例数据,但应该对 reportId 和 imageId 进行规范化