2013-03-02 429 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