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次のいずれかに置き換えることができます。

  • マイクロ秒
  • 2番目
  • 時間
  • クォーター
于 2012-06-13T23:43:39.560 に答える
1

あなたの質問には2つの答えがあるようです。@Tim は 1 つの回答を受け取りました(指定した制限より古いアルバムを除外します)。これにより、代替案が得られます...

  • 最初に、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 に答える