我有2张桌子 第一个表word_cloud(auto inc),predefined_text,content_id。 第二个表word_cloud_count(auto inc),predefined_text,content_id,count。 我将数据插入到word_cloud时调用触发器,它基本上对单词进行分组,计算计数并将其插入到word_cloud_count
word_cloud表由
组成id | predefined_text | content_id
---------------------------------
1 | ABC | 1
2 | ABC | 1
3 | ABC | 1
4 | XYZ | 2
5 | XYZ | 2
6 | XYZ | 2
7 | XYZ | 1
8 | ABC | 2
9 | ABC | 2
10 | ABC | 2
word_cloud_count由
组成id | predefined_text | content_id | count
-----------------------------------------------
1 | ABC | 1 | 3
2 | XYZ | 2 | 3
3 | ABC | 2 | 3
4 | XYZ | 1 | 1
5 | ABC | 1 | 3
6 | XYZ | 2 | 3
7 | ABC | 2 | 3
8 | XYZ | 1 | 1
在上表中,word_cloud_count行号5,6,7,8是重复数据,
触发功能
CREATE TRIGGER word_cloud_count_insert after insert on word_cloud
INSERT INTO word_cloud_count (Word,content_id ,count )
SELECT predefined_text,content_id, count(*)
FROM word_cloud
group by predefined_text,content_id
一切正常,值将被插入word_cloud_count表
但是我的问题是每次将数据插入到word_cloud中时都会调用触发器并将重复值存储到word_cloud_count
如何避免这种情况,并在word_cloud
中插入新记录时仅更新计数器任何建议都会有很大帮助,提前致谢
答案 0 :(得分:0)
为什么不使用同一张桌子?看一看:
创建包含所有这些列的表:
create table word_cloud
(
id int not null primary key auto_increment,
predefined_text varchar(200),
content_id int,
`count` int default 1,
unique (predefined_text,content_id) -- important
);
当你运行一个插入语句时,添加额外的句子on duplicate
:
INSERT INTO word_cloud (predefined_text,content_id) VALUES ('XYZ',1)
ON DUPLICATE KEY UPDATE `count` = `count` + 1;
INSERT INTO word_cloud (predefined_text,content_id) VALUES ('ABC',1)
ON DUPLICATE KEY UPDATE `count` = `count` + 1;
INSERT INTO word_cloud (predefined_text,content_id) VALUES ('XYZ',2)
ON DUPLICATE KEY UPDATE `count` = `count` + 1;
随机执行后插入有时会得到:
mysql> select * from word_cloud;
+----+-----------------+------------+-------+
| id | predefined_text | content_id | count |
+----+-----------------+------------+-------+
| 1 | XYZ | 1 | 2 |
| 3 | ABC | 1 | 7 |
| 10 | XYZ | 2 | 1 |
+----+-----------------+------------+-------+