1

我有一个小型的自制画廊,我仍在努力: 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

4

2 回答 2

1

假设您只想在可以使用的时间段内创建相册

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

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

  • 微秒
  • 第二
  • 分钟
  • 小时
  • 星期
  • 四分之一
于 2012-06-13T23:43:39.560 回答
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
于 2012-06-13T23:50:46.807 回答