Php 显示最常用的查询字符串

Php 显示最常用的查询字符串,php,mysql,Php,Mysql,我有一个显示数据库数据的页面。在用户看到数据之前,他们有几个选择框,以便他们可以选择以多种不同的方式过滤数据,例如选择显示特定时间段内的数据。当我使用get方法时,url看起来类似于下面的内容 http://www.example/com?report=2&days=7&etc=2 这一切都很好,用户可以过滤数据以获得他们想要的不同结果。我一直在查看我的分析帐户,可以看到一些查询比其他查询更受欢迎。我如何让用户知道哪些查询最受欢迎(例如,在过去24小时内浏览次数最多)。目前,我

我有一个显示数据库数据的页面。在用户看到数据之前,他们有几个选择框,以便他们可以选择以多种不同的方式过滤数据,例如选择显示特定时间段内的数据。当我使用get方法时,url看起来类似于下面的内容

http://www.example/com?report=2&days=7&etc=2
这一切都很好,用户可以过滤数据以获得他们想要的不同结果。我一直在查看我的分析帐户,可以看到一些查询比其他查询更受欢迎。我如何让用户知道哪些查询最受欢迎(例如,在过去24小时内浏览次数最多)。目前,我已经制作了一个手动html表格,我会在早上根据分析数据进行更新

乙二醇


这样,我可以对具有额外排序参数的查询进行一定时间段的计数。这是实现这一目标的最佳方式吗?

我会更进一步,并考虑以下几点:

http://www.example/com?report=2&days=7&etc=2
基本上与:

http://www.example/com?report=2&etc=2&days=7
关于它表示的内容,但是您提到的算法将它们记录为两个不同的报告,因为
$\u SERVER['QUERY\u STRING'是不同的

此外,从应用程序业务逻辑的角度来看,可能不会使用额外的参数,但会提供:

http://www.example/com?report=2&etc=2&days=7&utm_source=feed
因此,我将对构成查询键的参数进行一些处理:

  • 按参数名称排序
  • 只考虑真正重要的参数

  • 我会多考虑以下几点:

    http://www.example/com?report=2&days=7&etc=2
    
    基本上与:

    http://www.example/com?report=2&etc=2&days=7
    
    关于它表示的内容,但是您提到的算法将它们记录为两个不同的报告,因为
    $\u SERVER['QUERY\u STRING'是不同的

    此外,从应用程序业务逻辑的角度来看,可能不会使用额外的参数,但会提供:

    http://www.example/com?report=2&etc=2&days=7&utm_source=feed
    
    因此,我将对构成查询键的参数进行一些处理:

  • 按参数名称排序
  • 只考虑真正重要的参数

  • 创建一个存储url的查询部分和时间戳的表。它不需要其他字段,因为您将获得最近调用的运行总和

    然后得到类似于

    select url, 
           count(*) as reqs 
      from queries 
     where ts > now() - interval 24 hour 
     group by url 
     order by reqs desc
    

    获取过去24小时内请求最多的url。

    创建一个存储url查询部分和时间戳的表。它不需要其他字段,因为您将获得最近调用的运行总和

    然后得到类似于

    select url, 
           count(*) as reqs 
      from queries 
     where ts > now() - interval 24 hour 
     group by url 
     order by reqs desc
    

    获取过去24小时内请求最多的URL。

    我认为您应该创建一个带有时间戳、报告、天数等的表,并将其用作键

    如果:

    • 任何时候参数都可以通过POST(表单)发送,它们不会出现在url中

    • 任何时候,它们中的一些可能来自cookie或其他来源,它们都不会出现在url中

    • 您决定向URL添加其他选项,这些选项可能会随着页面的变化而变化,但不会修改显示的报告类型,如&viewkind=2&colorset=3等样式设置选项,或添加random以使缓存无效,如&rnd=83732或您将来可能决定的任何其他选项

    • 添加到url的任何其他内容,如哈希值#name,都可能会产生干扰(跳转到页面底部一半的命名锚点将被视为不同的报告)

    • 此外,伪造完整URL攻击数据库可能比伪造单个整数或字符串名称参数容易得多

    • 此外,您的站点可能会以不同的方式被调用,从而使url不同。前面有www或没有www,如果安全,则使用https。某些参数可能具有默认值,例如,不指定天数可能与天=1相同,因此报告可能相同,但URL不同


    我认为您应该创建一个带有时间戳、报告、天数等的表,并将其用作键

    如果:

    • 任何时候参数都可以通过POST(表单)发送,它们不会出现在url中

    • 任何时候,它们中的一些可能来自cookie或其他来源,它们都不会出现在url中

    • 您决定向URL添加其他选项,这些选项可能会随着页面的变化而变化,但不会修改显示的报告类型,如&viewkind=2&colorset=3等样式设置选项,或添加random以使缓存无效,如&rnd=83732或您将来可能决定的任何其他选项

    • 添加到url的任何其他内容,如哈希值#name,都可能会产生干扰(跳转到页面底部一半的命名锚点将被视为不同的报告)

    • 此外,伪造完整URL攻击数据库可能比伪造单个整数或字符串名称参数容易得多

    • 此外,您的站点可能会以不同的方式被调用,从而使url不同。前面有www或没有www,如果安全,则使用https。某些参数可能具有默认值,例如,不指定天数可能与天=1相同,因此报告可能相同,但URL不同


    可能是浪费时间,因为OP可以控制生成查询的gui。你认为在一个月后,当他必须向该页面添加一些新功能时,他会记得保持URL不变吗?或者某位同事正在这些页面上添加/更新功能?我认为这并不重要,因为运行时间将超过24小时。你的陈述基于一些错误的假设:1-报告在未来不会改变/发展(这种情况很少发生);2-参与开发的每个人都会意识到需要将参数固定为顺序和编号。3-报告是24小时的,而ops表示是过去7天的报告。你的解释在一套严格的规则中是有意义的,但我的指导方针实施起来并不难,也不费时间来施加这些约束。不,7天是查询的一部分。OP说“(如过去24小时内观看次数最多)”这是我的假设。另外,“我有一个页面…选择几个bo