php - 查询以创建有关用户站点搜索、MySQL 和 PDO 的趋势报告

标签 php mysql pdo

我的订阅网站拥有一个包含数千种资源 Material 的库,该库是使用 PDO 在 MySQL 数据库上构建的。

用户可以按大类和子类访问资源。如果用户正在寻找非常具体的内容,他们可以搜索库。

我目前正在将所有订阅者搜索记录到表中:

table - search_terms
primary_key (primary_key)
search_terms (tinytext)
time_stamp (timestamp)

如何生成订阅者正在使用的热门搜索列表?

我正在寻找有关数据库查询的想法,而不仅仅是简单地计算单个单词的出现次数,因为我想要这些短语。样本数据:

primary_key     search_terms                             time_stamp
1               what kind of chicken feed should I use   12:01:01 mm/dd/yy
2               what makes a good chicken feed           13:01:23 mm/dd/yy
3               when should I feed my chickens           09:23:15 mm/dd/yy
4               how to build a chicken house             18:29:10 mm/dd/yy
5               good breed for laying eggs               22:14:01 mm/dd/yy
6               best chicken feed                        01:10:00 mm/dd/yy
7               how do I get blue eggs                   18:42:48 mm/dd/yy
8               what do I do with a broody hen           etc etc
9               what is a broody hen                     etc etc
10              stop a hen being broody                  etc etc

如果这是示例数据,则 HitTest 门的搜索将是: “鸡饲料”和“孵蛋母鸡”。

最佳答案

Google 趋势表格有 2 列:搜索字词和搜索量指数。如果没有更多信息,编写索引超出了我可以向您展示的范围,但我怀疑“计数”表足以满足您的需求。

上面包含的表格提供了一些说明,但它不允许我展示“计算”搜索词的值(value)。因此,我提供了自己的示例数据库:

   primary_key       search_terms          time_stamp
1            1               beer 2017-07-01 13:07:31
2            2         white wine 2017-07-04 13:39:28
3            3            whiskey 2017-07-05 01:06:23
4            4  whiskey for gifts 2017-07-05 04:17:22
5            5  craft beer denver 2017-07-05 14:48:03
6            6               beer 2017-07-10 07:33:13
7            7         white wine 2017-07-14 02:13:00
8            8  pinot grigio wine 2017-08-22 03:16:18
9            9 whiskey from japan 2017-08-23 07:30:59
10          10    white wine rare 2017-08-01 15:03:25
11          11         white wine 2017-08-02 14:15:24
12          12  craft beer dallas 2017-08-02 22:03:44
13          13   new york whiskey 2017-08-03 05:45:09
14          14         white wine 2017-08-03 16:06:18
15          15  beer ipa michigan 2017-08-04 20:15:50

请注意,搜索词“啤酒”和“白 Wine ”被多次列出。我们可以调用一个简单的搜索查询:

返回所有不同(或唯一)的搜索词。

计算每个搜索词的出现次数。

SELECT
    DISTINCT search_terms AS 'Unique Search Terms',
    COUNT(search_terms) AS 'Occurrence'
FROM search_terms
GROUP BY search_terms
ORDER BY Occurrence DESC

结果输出是:

   Unique Search Terms Occurence
1           white wine         4
2                 beer         2
3              whiskey         1
4    whiskey for gifts         1
5    craft beer denver         1
6    pinot grigio wine         1
7   whiskey from japan         1
8      white wine rare         1
9    craft beer dallas         1
10    new york whiskey         1
11   beer ipa michigan         1

搜索词“白 Wine ”似乎比“啤酒”更受欢迎,而“啤酒”比其他搜索词更受欢迎。当然,这是一个简化的示例,但相同的查询应该适用于更大的表。

编辑:我发现您已修改了您的要求并希望过滤掉停用词。正如其他人所建议的,这要复杂得多。但是,您可以定义要在排列结果时删除的停用词列表。然后可以修改上面提供的查询以删除这些单词并仅显示相关关键字。

作为最终建议,您可能不希望列与其表共享相同的名称(在本例中为“search_terms”)。这可能会导致困惑和问题。

关于php - 查询以创建有关用户站点搜索、MySQL 和 PDO 的趋势报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514096/

相关文章:

mysql - Oracle to MySQL migration 关于语法差异的两个问题

mysql - 如何获取与帖子id匹配的标签并显示记录

PHP 在传递给 json_encode 之前进行 usort

php - Zend_Acl 查找所有继承的角色

php - mysql 查询问题似乎无法找出原因

mysql更新问题,其中id在

javascript - Internet Explorer 自动从网站下载音乐而不是流式传输

mysql - 从数据库中清除垃圾邮件的正确方法

mysql - 什么更好 : joins or multiple sub-select statements as part of one query

php - 在数据映射器模式中创建对象数组