2013-03-02 428 views
3

这使得未来与一个错误,我无法弄清楚,为什么...MySQL查询发行日期减去7天

SELECT 
    i.user_id 
FROM (SELECT 
    SUM(us.score) AS score_sum, 
    us.user_id 
     FROM user_scores us 
     WHERE us.created >= DATE(DATE_SUB(NOW(),INTERVAL 7 DAY)) 
     GROUP BY us.user_id) AS i 
ORDER BY i.score_sum 
LIMIT 1 

异常“CDbException”有消息

CDbCommand failed to execute the SQL statement: CDbCommand failed to prepare the SQL statement: SQLSTATE[HY000]: General error: 1 near "7": syntax error.

的SQL语句执行是:

SELECT 
    i.user_id 
FROM (SELECT 
    SUM(us.score) AS score_sum, 
    us.user_id 
     FROM user_scores us 
     WHERE us.created >= DATE(DATE_SUB(NOW(),INTERVAL 7 DAY)) 
     GROUP BY us.user_id) AS i 
ORDER BY i.score_sum 
LIMIT 1 



<?php 

class WinnerCommand extends CConsoleCommand 
{ 
    public function actionSelect() 
    { 
     $sql = "SELECT i.user_id FROM 
      (SELECT SUM(us.score) AS score_sum, us.user_id FROM user_scores us 
      WHERE us.created >= DATE(DATE_SUB(NOW(),INTERVAL 7 DAY)) 
      GROUP BY us.user_id) AS i 
      ORDER BY i.score_sum 
      LIMIT 1"; 
     $user_id = Yii::app()->db->createCommand($sql)->queryScalar(); 
     echo $user_id; 
     return $user_id; 
    } 

}

?>

+0

什么数据类型是在你的表中创建的? – 2013-03-02 19:19:17

+2

你通过什么API调用?您是否在任何地方使用准备好的语句占位符? – 2013-03-02 19:19:50

+1

如果您在客户端上面直接执行查询,是否运行(看起来应该如此)?什么是MySQL版本? – 2013-03-02 19:20:17

回答

3

我无法解释问题,但可以消除表达式中的子查询。也许这将有助于:

 SELECT us.user_id 
     FROM user_scores us 
     WHERE us.created >= DATE(DATE_SUB(NOW(), INTERVAL 7 DAY)) 
     GROUP BY us.user_id) 
     ORDER BY SUM(us.score) 
     LIMIT 1 
+0

我不认为我们可以在ORDER BY close内使用聚合('SUM')。 – artragis 2013-03-02 20:17:38

+1

@artragis。 。 。这是允许的,在MySQL中以及我知道的支持SQL的每个其他数据库中都是如此。 – 2013-03-02 20:31:12

+0

好吧,我不知道,很高兴能够开启这个话题。 – artragis 2013-03-02 20:42:18