【问题标题】:MySQL Top10 for 7 Days AgoMySQL Top10 7 天前
【发布时间】:2014-02-22 18:20:46
【问题描述】:

我有问题... 我在这个网站上搜索任何解决方案......我尝试了它们,但只进行了一次锻炼:( 所以我试图获得 7 天前的前 10 名结果... 所以我尝试这样的代码:

SELECT * FROM `data` 
WHERE cast(`date` as DATE) BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
AND CURDATE() ORDER by `viewed` DESC LIMIT 0,10

SELECT * FROM `data` 
WHERE `date` > (NOW() - INTERVAL 7 DAY) 
ORDER by `viewed` DESC LIMIT 0,10

SELECT * FROM `data` 
WHERE DATE(`date`) = DATE_SUB(NOW(), INTERVAL 7) 
ORDER by `viewed` DESC LIMIT 0,10

SELECT * FROM `data` 
WHERE `date` >= SUBDATE(NOW(), INTERVAL 7 DAY) 
ORDER by `viewed` DESC LIMIT 0,10

我尝试将它们与NOW()TIME()DATE()CURDATE()SUBDATE()SUBTIME()DATE_SUB() 等任意组合...但没有任何效果:(我真的不知道是什么问题. 我用time() 函数(PHP) 将日期提交到数据库,会不会是这个问题?

【问题讨论】:

  • 你用 PHP 中的time() 函数或 MySQL 自己的TIME() function 将日期提交到 mysql? date 列的数据类型是什么?如果你用 PHP time() 填充它,它可能是一个 unix 时间戳
  • “无济于事”是什么意思?你能展示一些示例数据吗?
  • 日期的数据类型是什么?
  • 它的 php 时间()。它将它保存到data,例如“1392749561”
  • 类型是指数据库中的类型。

标签: mysql days


【解决方案1】:

试试这个:

SELECT date, viewed FROM data
WHERE date BETWEEN UNIX_TIMESTAMP(NOW() - INTERVAL 7 day) AND UNIX_TIMESTAMP(NOW())
ORDER BY viewed DESC
LIMIT 0,10;

如果你想显示日期和时间,这个。

SELECT FROM_UNIXTIME(date), viewed FROM data
WHERE date BETWEEN UNIX_TIMESTAMP(NOW() - INTERVAL 7 day) AND UNIX_TIMESTAMP(NOW())
ORDER BY viewed DESC
LIMIT 0,10

样本数据:

CREATE TABLE data 
    (
     id int auto_increment primary key, 
     date varchar(10),
     viewed int
    );

INSERT INTO data
(date, viewed)
VALUES
(1392749561, 50),
(1392749950, 25),
(1392850985, 10),
(1393023471, 75),
(1392936840, 100);

SQLFiddle demo

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2015-12-08
    • 2015-02-14
    相关资源
    最近更新 更多