0

我正在寻找一种在 MySQL 中实现多重集(“包”)的标准方法。这个多重集可能包含的值只是字符串。

背后的原因是计数;我有一个我无法预先定义的事件列表,我希望计算它们的发生次数。例如,在 Python 中,这可以通过Counter来完成。

以前我问过一个关于MySQL 中的集合的问题;到目前为止,我发现的最佳解决方案是使用TEXT数据类型将逗号分隔的字符串放入数据库中,然后使用FIND_IN_SET它来查看元素是否在集合中。但是,此解决方案不适用于多重集,因为在文本字段中存储一个字符串,例如一千次,然后计数,效率不高......

用例是这样的:每当我的(Python)脚本运行期间发生与给定行相关的事件时,我希望访问数据库并将该事件添加到数据库中的每一行;最后,我希望计算每一行中每个事件的发生次数。对我来说更重要的是数据的插入将是有效的(与最终计算相比)。

编辑

我的原始数据表包含数千行,每行都应该有一个“多集字段”(一种或另一种方式)。每个这样的多重集可能包含不会太多(例如,少于 20 个)可区分值,但是每个这样的值可能在多重集中出现很多(例如,超过 500 个)次。因此,等待稍后计算的每个值的字符串(或其他表示形式)可能效率低下(据我所知)。例如,一个不同的表,其中任何(原始)行的任何事件都会生成一行,它可能会很快增长到非常大(数百万行)。

4

1 回答 1

2

鉴于这是您现有的表:

create table table1(thekey int primary key, random_info varchar(10))

创建您的事件表:

create table table1_event(thekey int not null, event varchar(100) not null, 
                     counter int, primary key(thekey, event))

对于每个事件:

insert into table1_event values(<a key>, 'the event', 1)
  on duplicate key update counter=counter+1

活动总结:

select table1.thekey, table1_event.event, table1_event.counter
from table1 left outer join table1_event on table1.thekey=table1_event.thekey

编辑以反映海报中更改的问题和评论

于 2014-02-28T09:34:58.317 回答