按日期范围排序SQL

时间:2012-06-13 23:33:43

标签: php mysql sql

我有一个小型的自制画廊,我仍在努力: http://springbreak.enteratenorte.com

SQL结构如下:

CREATE TABLE IF NOT EXISTS 'en_albums' (
    'id' int(11) NOT NULL auto_increment,
    'name' text,
    'folder' text,
    'description' text,
    'hits' int(11) default NULL,
    'datecreated' date default NULL,
    PRIMARY KEY  ('id')
 ) ENGINE=MyISAM AUTO_INCREMENT=372 DEFAULT CHARSET=latin1 AUTO_INCREMENT=372 ;

我有大约300张专辑,所以我会根据这个查询对最受欢迎的专辑进行排序:

SELECT * FROM en_albums ORDER BY hits DESC

但我想知道我怎么能做同样的事情,但只对不超过6个月,1个月或1年的专辑进行排序,这是我专辑中的行样本:

INSERT INTO 'en_albums' 
  ('id', 'name', 'folder', 
   'description', 'hits', 'datecreated') 
VALUES 
 (1, 'Friends Picture', 'en-fotosdeamigos', 
  'Pictures sent by our visitors', 1514, '2005-07-19');

感谢您的帮助! :d

2 个答案:

答案 0 :(得分:1)

假设您只想在一段时间内创建专辑,可以使用

SELECT * FROM en_albums WHERE datecreated > DATE_SUB(NOW(),INTERVAL 6 MONTH) ORDER BY hits DESC 

这只会返回日期大于6个月前的项目。您可以将6MONTH部分更改为您想要的部分。您可以使用以下任意内容替换MONTH

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

答案 1 :(得分:1)

你的问题似乎有两个答案。 @Tim接了一个答案(排除了超过指定限制的专辑)。这提供了另一种选择......

  • 首先,列出不到6个月的所有相册
    (对于那些专辑,首先列出点击率最高的专辑)

  • 在这些专辑之后,列出了所有超过6个月的专辑的名单 (对于这些专辑,请先列出最近的专辑)

这就是......

SELECT
  *
FROM
  en_albums
ORDER BY
  CASE WHEN datecreated > DATE_SUB(NOW(), INTERVAL 6 MONTH) THEN 0    ELSE 1 END ASC,
  CASE WHEN datecreated > DATE_SUB(NOW(), INTERVAL 6 MONTH) THEN hits ELSE 0 END DESC,
  datecreated DESC

任何不到6个月的专辑都将按...排序。

  • 0, hits, datecreated

任何超过6个月的专辑都会按...排序。

  • 1, 0, datecreated