2014-11-02 70 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