我有一个小型的自制画廊,我仍在努力: 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
答案 0 :(得分:1)
假设您只想在一段时间内创建专辑,可以使用
SELECT * FROM en_albums WHERE datecreated > DATE_SUB(NOW(),INTERVAL 6 MONTH) ORDER BY hits DESC
这只会返回日期大于6个月前的项目。您可以将6
和MONTH
部分更改为您想要的部分。您可以使用以下任意内容替换MONTH
:
答案 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