1

誰かが、私が必要としていることを正確に実行していないように見えるMySQLクエリを手伝ってくれることを望んでいます。

クライアントから、ウェブサイトのランディングページの更新システムを改善するように依頼されました。現在、更新システムにより2、サイトへの最近の変更に関するクイックラインエントリを提供できます。これは、データをHTMLフォームに入力し、データをMySQLデータベースにロードすることで行われます。

TIMESTAMP現在、このシステムは、に設定されている「作成済み」列のみを使用しCURRENT_TIMESTAMPます。postdateという列をテーブルに追加しました。Postdateは、とを介してTIMESTAMP設定された値を持つnullフレンドリです。PHPHTML

これまでのところ、これはすべてかなり簡単です(そして私のプロジェクトに固有です)。これが私にとって奇妙になるところです:

テーブルの仕様を次のように指定します。

CREATE TABLE `updates` (
  `update` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `comment` text,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `status` int(11) DEFAULT '1',
  `gallery` int(11) DEFAULT NULL,
  `website` int(11) DEFAULT NULL,
  `covers` int(11) DEFAULT NULL,
  `resume` int(11) DEFAULT NULL,
  `calendar` int(11) DEFAULT NULL,
  `postdate` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`update`)
) ENGINE=InnoDB 

なぜクエリが必要なのですか?

select updates.name, updates.comment, updates.status, updates.gallery, updates.website, 
                    updates.covers, updates.resume, updates.calendar, 
                    ifnull(postdate, updates.created) as `created`
                from angela.updates
                where updates.status = 1
                and updates.created <= now()
                order by `updates`.`created` desc
        limit 15;

次のタイムスタンプの順序を返します。

2012-10-15 00:00:00
2013-12-25 00:00:00
2012-12-25 00:00:00
2013-02-01 00:00:00
2013-01-20 13:48:48
2013-01-20 13:36:44
2013-01-20 12:59:57
2013-01-20 12:56:35
2013-01-20 12:49:20
2012-10-29 11:00:12
2012-10-24 14:10:13
2012-08-14 23:53:53
2012-08-14 23:53:18
2012-08-14 23:50:34
2012-08-14 23:50:08

特定の時刻のない行はPostdate列からプルされ、特定の時刻の値のある行はCreated列からプルされることに注意してください。

MySQLの時間比較には、私がここで理解していない、ある種の微妙な点があるに違いありません。

どんな助けでも大歓迎です、私はこれのためにインターネットを配っています。

4

0 に答える 0