【问题标题】:How can I add and sort MySQL results by ID (PHP) [closed]如何按 ID (PHP) 添加和排序 MySQL 结果 [关闭]
【发布时间】:2013-10-27 08:49:54
【问题描述】:

我正在尝试用 PHP 编写一些代码,让我可以在过去一周、一个月、一年等期间获得我网站上的前 10 个页面。现在,每天的页面浏览量都存储在一个表格中。每行包含页面 ID、当天 0:00 的 unix 时间戳和当天的浏览量。

所以要完成我想要的,我需要选择此表中的所有行(在我给定的时间范围内),然后将具有相同页面 ID 的每一行的页面浏览量相加,然后将其排序为低的。我想不出一种不会因大量循环而疯狂复杂的方法。有人对我有什么想法吗?

谢谢!

【问题讨论】:

  • 你能告诉我们你到目前为止写了什么吗?
  • 在 MYSQL 之外学习 DAY、MONTH、YEAR、GROUP BY、COUNT 和 ORDER BY 函数

标签: php mysql sorting sum


【解决方案1】:

最简单的方法可能是简单地为您想要的每个时间段进行查询

SELECT page_id, SUM(pageviews)
FROM table
WHERE
time BETWEEN yourstarttime AND NOW();
GROUP BY page_id
ORDER BY SUM(pageviews);

yourstarttime 例如,去年将是 DATE_SUB(NOW(), INTERVAL 1 YEAR) 以获取去年的所有计数。

【讨论】:

  • 我相信您将需要pageviewsSUM() 而不是COUNT(),因为每一行都包含当天的页面浏览量。
  • @Linger Ack。发现得好。修复。
  • 为什么简单并不总是最好的......这对于大型表(并且网络流量表可以并且将会很大)来说可能很难,即使使用覆盖索引它也会触发对临时表和文件排序的需求(快速排序)通过。检查sqlfiddle.com/#!2/018c69/1 .. 问题是 GROUP BY page_id/ORDER BY SUM(pageviews) 的组合更好的选项可以是派生表
  • @RaymondNijland 那么你建议用 PHP 进行排序吗?
  • @Jim no not in PHP 但派生表在这里也不是一个很好的选择,因为分组在 page_id 上总是需要的(我想我需要一些咖啡),即使您使用派生表表(在 FROM 中读取子查询).. topicstater 可能更需要分而治之的策略来保持性能,但我现在可以说,因为我没有看到结构或数据的示例..
【解决方案2】:

您可以使用 MySQL 日期函数来提取您关心的日期部分,并按此分组。

例如,如果您按周处理它,您可以使用 week() 函数 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week 将时间戳转换为一周,然后您每周的点击数将被分组,您可以降序排序以找到顶部10.

【讨论】:

    【解决方案3】:

    看看DATE_SUB

    SELECT *
    FROM `yourTable`
    WHERE `some_time` < DATE_SUB(NOW(), INTERVAL 2 WEEK);
    

    (您需要“2 周”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2014-07-03
      • 1970-01-01
      相关资源
      最近更新 更多