2014-11-02 77 views
1

我有這個完美運行的MySQL查詢,直到我將POW函數添加到它。我不明白爲什麼我會得到這個錯誤。我試圖谷歌它,但提出了一個解決方案空。使用POW時MySQL命令不同步()

原始查詢:

SELECT 86400/
     (NOW() - `created_at`) * 
     (
      (
       SELECT COUNT(`Votes`.`voteID`) 
       FROM `Votes` 
       WHERE `postID` = `Posts`.`postID` 
       LIMIT 1 
      ) 
      + 0 
      * 5 
     ) AS `rank` 
FROM `Posts` 

查詢與POW():

SELECT POW(
      86400 
      /(NOW() - `created_at`) 
      * 
      (
       (
        SELECT COUNT(`Votes`.`voteID`) 
        FROM `Votes` 
        WHERE `postID` = `Posts`.`postID` 
        LIMIT 1 
       ) 
       + 0 
       * 5 
      ), 
      1.8 
     ) AS `rank` 
FROM `Posts` 

我得到的錯誤是#2014 - Commands out of sync; you can't run this command now

+0

我不明白你在向哪種力量提升它,這可能是一個問題,無論如何。至於您的實際錯誤,當客戶端和服務器不同步時會出現此錯誤,這可能有很多原因,但通常與MySQL客戶端錯誤有關(也請參閱此答案:http://stackoverflow.com/a/6583068/54017 ) – Wolph 2014-11-02 17:24:34

+0

我正在升高到1.8但確實沒有什麼相關性。至於你也喜歡的答案,我真的不明白這是如何幫助我的,因爲這只是一個查詢...... – CupOfTea696 2014-11-02 17:28:52

+1

問題是它是MySQL中的錯誤還是客戶端錯誤。它不應該與您的查詢有關。如果這個錯誤真的是使用'POW()'而不是MySQL錯誤。如果不是這是一個客戶端錯誤/與您的MySQL版本不兼容。嘗試使用不同的客戶端執行查詢(即直接從MySQL命令行)。 – Wolph 2014-11-02 17:31:46

回答

0

我試過Ollie瓊斯的建議,這對我來說非常合適!

您可能會在POW()中通過傳遞一個荒謬大或非數字的第一個參數來暴露一個錯誤。 (NOW() - created_at)可能不會做你認爲它所做的事情。如果您希望通過時間差計算給出秒數,您可能需要UNIX_TIMESTAMP() - UNIX_TIMESTAMP(created_at)。 - Ollie瓊斯

0

雖然這看起來有趣的錯誤POW()函數,你也許可以通過封裝到另一個子查詢中得到解決:

SELECT POW(rank,1.8) 
FROM 
(
SELECT (
      86400 
      /(NOW() - `created_at`) 
      * 
      (
       (
        SELECT COUNT(`Votes`.`voteID`) 
        FROM `Votes` 
        WHERE `postID` = `Posts`.`postID` 
        LIMIT 1 
       ) 
       + 0 
       * 5 
      ) 
     ) AS `rank` 
FROM Posts 
) tabX 
+0

不,那沒用。仍然得到相同的錯誤。 – CupOfTea696 2014-11-07 22:43:37

+0

然後嘗試將rank設置爲一個變量,然後在第二個單獨的查詢中像這樣打開它。如果即使這樣你就會得到這個錯誤,我放棄了。 – David162795 2014-11-08 01:32:56

+0

對我的問題之一的意見已經解決了,但我發佈了我以上使用的解決方案:) – CupOfTea696 2014-11-08 12:14:52