MySQL - 按天“分组”多行,然后按大多数查看排序

时间:2012-02-17 15:29:28

标签: php mysql codeigniter group-by sql-order-by

我要做的是在电子报首页上对视频进行排序。所有视频将按日分组在一起。每页多天。在每天的部分中,我想按照大多数观看或任何其他类型的第二种排序算法来订购视频。

期望的结果:

Todays Videos:
  - Video 1 (100 views)
  - Video 2 (90 views)
  - Video 3 (50 views)

Yesterdays Videos:
  - Video 4 (400 views)
  - Video 5 (250 views)
  - Video 6 (100 views)

Feb 15th Videos:
  - Video 7 (600 views)
  - Video 8 (500 views)
  - Video 9 (300 views)

然后会有分页,所以第二页将继续2月14日,13日等...

仅供参考,我知道这可能不是最好的方法,但数据库结构使用存储在int(11)字段中的unix时间戳。

我正在使用CodeIgniter,但是任何正常的MySQL示例都会很棒,我想用一个查询来做这件事。我不确定我是否可以使用groupby / orderby或其他一些功能执行此操作。我正在阅读分组集,但不确定我是否在正确的轨道上。

任何帮助都会很棒,因为我完全陷入了这个问题。

编辑(添加表格结构):

video_pk int(10) unsigned NOT NULL auto_increment
views int(10) unsigned NOT NULL
scheduled_date int(11) NOT NULL

scheduled_date是unix时间戳

1 个答案:

答案 0 :(得分:0)

就像Simon在上面的评论中提到的那样,如果scheduled_date字段只是一个Date,那就更简单了。如果是这种情况,那么您可以使用以下查询获得结果:

SELECT 'scheduled_date', 'video_pk', 'views' FROM 'table' 
GROUP BY 'scheduled_date',video_pk ORDER BY 'scheduled_date','views' DESC

将它作为时间戳,事情会变得更加复杂,因为您必须有一些方法来确定视频是否在同一天,因此您可以根据需要使用单个查询来执行此操作。

编辑:您提到您希望将其保留为与网站其他部分一起使用的时间戳。也许一个可能的解决方案是保留一个附加字段,将时间戳存储在日期旁边,或者如果您不需要特定时间,只需要重要日期,您可以在需要时将日期转换为时间戳。

相关问题