【问题标题】:MySQL Query Date ErrorsMySQL 查询日期错误
【发布时间】:2014-02-28 00:13:19
【问题描述】:

我有这个查询索引我的图像并按受欢迎程度排序,但我不能让用户选择间隔,因为查询有问题:

switch($Data['data']){
    case 'daily':$QueryDate='=CURDATE()';break;
    case 'weekly':$QueryDate=' BETWEEN SUBDATE(CURDATE(), INTERVAL 7 DAYS) AND NOW()';break;
    case 'monthly':$QueryDate='>CURDATE() - INTERVAL 31 DAYS';break;
    default: Core::redirect('image/browse/daily/1');break;
}
$IMGDB = new Database('images');
$query = "SELECT *, (derived.`likes` * 2 + derived.`views`) as `popularity` from 
 (SELECT *, 
  (SELECT COUNT(*) FROM `likes` WHERE `like`=I.id AND `date`".$QueryDate.") AS `likes`, 
  (SELECT SUM(`views`) FROM `views` WHERE `id`=I.id AND `date`".$QueryDate.") AS `views`
  FROM images AS I
 ) AS derived
where 1 ORDER BY `popularity` DESC ";

只有日常案例有效。

这是错误:

SQL 错误 (1064): 您的 SQL 语法有错误;..... 使用 'DAYS) AND NOW()) AS likes, (SELECT SUM(views) FROM views WHERE id= I.编号A

【问题讨论】:

  • 你得到什么错误?
  • @TarynEast SQL 错误 (1064): 您的 SQL 语法有错误;..... 使用 'DAYS) AND NOW()) AS likes, (SELECT SUM( views) FROM views WHERE id= I.id A'
  • 这是INTERVAL 7 DAY,而不是DAYS
  • @Sammitch 创建一个答案,以便我可以选择它作为解决方案。
  • 而不是>CURDATE() - INTERVAL 31 DAY,您可能想使用>CURDATE() - INTERVAL 1 MONTH,只是一个建议:)

标签: php mysql sql date


【解决方案1】:

指定天间隔的正确语法使用DAY 关键字。你使用过DAYS

BETWEEN SUBDATE(CURDATE(), INTERVAL 7 DAYS) AND NOW()

和:

> CURDATE() - INTERVAL 31 DAYS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2015-04-29
    • 2015-06-17
    • 2016-08-21
    • 2016-09-26
    • 2011-07-01
    • 2011-04-23
    相关资源
    最近更新 更多