使用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。
答案 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
;