我正在尋找一種在MySQL中實現multiset(「包」)的標準方法。這個multiset可能包含的值只是字符串。實現multiset的標準方法?
它背後的原因是計數;我有一個事件清單,我不能預先定義,而且我希望統計它們的發生次數。例如,在Python中,這可以通過Counter完成。
以前我問過一個關於sets in MySQL的問題;我迄今發現的最佳解決方案是使用TEXT
數據類型在數據庫中放入逗號分隔的字符串,然後使用FIND_IN_SET
來查看元素是否在集合中。然而,這種解決方案是不利於多集,作爲存儲字符串,也就是說,在一個文本字段一千遍,再算上是,是不是有效?
使用情況是這樣的:每當一個事件在運行與給定行相關的我的(Python)腳本期間發生,我希望訪問數據庫並將該事件添加到數據庫中的每一行;最後,我希望統計每個行中每個事件的發生次數。對我來說更重要的是插入數據將是有效的(與最終計算相比)。
編輯
我的原始數據表包含數千行的,每個人都應該有一個「多集場」(這種或那種方式)。每個這樣的多重集可能包含不多的(比如少於20個)區別值,但是每個這樣的值可能在多重集中出現很多次(比如超過500次)。因此,每個值由其自身的字符串(或其他表示),等待稍後計算,可能效率低下(據我瞭解)。例如,任何(原始)行的任何事件將成爲一行的不同表格可能會迅速增長非常大(數百萬行)。
也許您希望'按table1_event.event'分組?無論如何,這確實可以解決我的問題。然而,由於我的任何原始行可能包含〜100000個事件,並且我可能有成千上萬的原始行,這聽起來有點低效。我會編輯我的問題。 – Bach
更新的答案看起來不錯,謝謝。 – Bach