MySQL返回错误的值

MySQL返回错误的值,mysql,Mysql,嗨,我正在尝试查询当前的余额,但是它似乎在最后显示了正确的余额,但总体上不正确。所以基本上计算是 如果状态等于“错误” 余额=余额-100 否则 余额=余额+(赔率*100) 结束 下面是我当前查询的输出: Odds Status Date balance 1.70 | wrong | 2015-02-08 13:22:17 | 205 3.05 | correct | 2015-02-08 20:27:44 | 30

嗨,我正在尝试查询当前的余额,但是它似乎在最后显示了正确的余额,但总体上不正确。所以基本上计算是

如果状态等于“错误”

余额=余额-100

否则

余额=余额+(赔率*100)

结束

下面是我当前查询的输出:

Odds    Status      Date                    balance
1.70  | wrong   |   2015-02-08 13:22:17 |   205
3.05  | correct |   2015-02-08 20:27:44 |   305
2.20  | correct |   2015-02-09 15:45:27 |   425
根据我的计算,余额应该是

-100
205
425
那么为什么它不显示这个呢

SET @balance = 0;
SELECT odds.meta_value AS odds, stat.meta_value AS stats, posts.post_date as postdate, 
        CASE WHEN stat.meta_value =  'wrong'
        THEN @balance := @balance -100
        ELSE @balance := @balance + (odds.meta_value * 100) 
        END as balance
        FROM  wp_t3a673_posts posts
        LEFT JOIN  wp_t3a673_postmeta stat ON posts.ID = stat.post_id
        AND stat.meta_key =  'status'
        LEFT JOIN  wp_t3a673_postmeta odds ON posts.ID = odds.post_id
        AND odds.meta_key =  'odds'
        LEFT JOIN  wp_t3a673_term_relationships tr ON posts.ID = tr.object_id
        LEFT JOIN  wp_t3a673_term_taxonomy t ON tr.term_taxonomy_id = t.term_taxonomy_id
        WHERE (
        stat.meta_value =  'correct'
        OR stat.meta_value =  'wrong'
        )
        AND posts.post_status =  'publish'
        AND t.taxonomy =  'category'
        AND (
        t.term_id =4
        OR t.term_id =5
        OR t.term_id =6
        )
ORDER BY posts.id

我没有仔细查看代码,但在使用变量(从MySQL文档中)使用变量之前,请考虑这一点:

作为一般规则,除了在SET语句中,您永远不应该为用户变量赋值,而应该读取同一语句中的值。例如,要增加变量,可以这样做:

设置@a=@a+1

对于其他语句,例如SELECT,您可能会得到预期的结果,但这并不能保证。在下面的语句中,您可能认为MySQL将首先计算@a,然后再进行赋值:

选择@a,@a:=@a+1

但是,涉及用户变量的表达式的求值顺序尚未定义


您可以在这里找到更多信息:

但这能修复计算错误的错误吗?我不确定你到底想让我改变什么?仔细看,你使用变量求和的方式似乎是“好”的方式。然而,连接确实为复制值留下了很大的空间,但是如果没有数据集,很难判断。我会做一个查询来列出所有数据,以查看是否有任何内容被多次添加。我在其他地方使用了或多或少相同的查询,它计数正确。奇怪的是,它在425结尾提供了正确的结果,但在开始时没有显示-100如果你发布了一个示例数据(例如,这里:)帮你做这件事会容易得多,