我有一个MySQL数据库,它有大量的记录。对于每条记录,都有一个名为"Comment"的文本字段,我在下面举了3个例子:
- "付款很快,谢谢。"
- "爱你,谢谢你"
- "快速交付,谢谢"
我的问题是:
我如何查询每条记录?查看"注释"字段的内容,然后计算出使用的前20个单词是什么
例如,使用单词上方的3条注释
- "谢谢"出现3次
- "快速"2次
- 其余的单词只使用一次
我猜我需要使用PHP来处理每个记录,使用"(空格)进行分解,删除逗号之类的字符;句号,然后存储结果,然后计数。
但我真的不确定最好的方法,也不知道如何处理复数,比如"谢谢"&"谢谢"。因此出现了以下问题:)
Matt
因为它们都在同一列中,所以在这里不能进行太多SQL过滤。
如果数据集不是太大(即php内存不足),那么您应该能够将其读取到php中并进行处理
您可以使用explode
来分割空间,并将数据作为一个巨大的数组来处理。您可以使用preg_match函数进行字符串比较操作,请参阅:http://us3.php.net/preg_match-您应该花一些时间研究正则表达式。
如果您正在查找SELECT COUNT(comment)之类的特定内容,其中的注释类似于"%谢谢%",那么在where子句中使用SQL like
函数会更容易,但您必须手动执行。
此外,您可能需要考虑将其转储到一个文件中,并使用基于unix的命令,如wc
,这可以帮助您完成所需的任务。如果您在类似unix的环境中,也可以使用PHP与这些命令进行交互。
除了写代码,我没有什么可以告诉你的了。
可能。然而,MySQL对于这种类型的查询并不是很好。如果你确实尝试过使用MySQL,那么实际完成可能需要很长时间,如果你想经常运行这种类型的查询,这将是不现实的。
我建议您考虑使用专门为这类查询设计的东西来索引数据。某种ApacheLucene衍生产品会做得很好,例如,您可以使用Elasticsearch。以下是ES的文档,描述了您希望运行的查询类型:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html
与MySQL不同的是,在ES这样的平台上运行这些查询会执行得非常快,因为它是专门为它设计的