计算所有行中特定列中的特定单词

时间:2017-11-19 21:55:22

标签: mysql

使用PDO和PHP,我如何有效地计算特定列的所有行中某个单词(水果)的所有出现次数,在这种情况下列为' text'?

假设我有一个这样的表:

| id | fruit     | text                                        |
|  1 | Apple     | Apple,Banana,Date,Elderberry,Mango          |
|  2 | Banana    | Fig,Apple,Cranberry,Pineapple               |
|  3 | Cranberry | Apple,Cranberry,Huckleberry,Mango,Pineapple |
|  4 | Date      | Banana,Yuzu,Raspberry,Cranberry,Apple       |

我必须得到这样的结果:

| id | fruit     | occurrences |
|  1 | Apple     | 4           |
|  2 | Banana    | 2           |
|  3 | Cranberry | 3           |
|  4 | Date      | 1           |

表格大约有。 200.000行。

我尝试使用PHP获取每个水果并在每个结果上运行以下查询(在stackoverflow上找到):

SELECT CHAR_LENGTH(text) - CHAR_LENGTH(REPLACE(text, 'Apple', '')) / CHAR_LENGTH('Apple') AS fruit_count FROM fruits

但它没有给我4个苹果的id 1,而不是0。

1 个答案:

答案 0 :(得分:1)

尝试以下方式:

SET SESSION group_concat_max_len = 1000000;

select @len:= group_concat(text separator ',') from t;

select
id,
fruit,
ROUND (   
        (
            CHAR_LENGTH(@len)
            - CHAR_LENGTH( REPLACE (@len, fruit, "") ) 
        ) / CHAR_LENGTH(fruit)        
    ) AS occurrences
    from t
    group by fruit
   ;

Click here for DEMO