我得到的评论从不同的网站和存储到表。对于每个评论,我将在单独的列中获得adjective和noun列表。
因此,对于每一次评审,这里都有主要的3个值。
review, adjective_list, rate
现在我想数数形容词重复的次数。在此之后,只推荐那些有形容词重复最长时间,并有4-5次复习的评论。
哪种方法是正确的?
我对此的想法是:
创建触发器,在有插入检查操作时执行操作。该触发器将读取列中有形容词,计算出现(不知道如何?),并存储顶部形容词与其发生。
同时推荐选择形容词,最大限度的出现,并查看4-5级的评论.
我不知道什么是正确的方式。任何帮助都是值得赞赏的。
主表如下所示:

发布于 2014-04-10 12:21:32
没有经过测试,但如果我正确理解您的要求,您应该能够基于这样的查询来完成以下工作:-
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(adj_noun, ',', aCnt + 1), ',', -1), COUNT(*)
FROM Main_Table
INNER JOIN
(
SELECT Units.i + Tends.i * 10 + Hundreds.i * 100 AS aCnt
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Units
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Tens
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Hundreds
) Integers_Query
ON aCnt <= (LENGTH(adj_noun) - LENGTH(REPLACE(adj_noun, ',', '')))
GROUP BY id, SUBSTRING_INDEX(SUBSTRING_INDEX(adj_noun, ',', aCnt + 1), ',', -1)它使用一个子查询来获取一个数字范围(0到999),并对您的表执行一个连接,在该表中,数字小于或等于逗号出现在adj_noun列中的时间(即减去adj_noun的长度,去掉adj_noun全长中的所有逗号)。然后使用SUBSTRING_INDEX将字符串指向aCnt逗号,并再次使用SUBSTRING_INDEX将该逗号中的字符串返回到前一个逗号(结果中不包括逗号)。
COUNT / GROUP BY应该会为您获取每个单词出现在每个项的结果列表中的次数。
可能效率很低。只有处理1000个逗号分隔的单词(容易扩展,但会变慢)。
https://stackoverflow.com/questions/22986022
复制相似问题