MySQL返回错误的值
嗨,我正在尝试查询当前的余额,但是它似乎在最后显示了正确的余额,但总体上不正确。所以基本上计算是 如果状态等于“错误” 余额=余额-100 否则 余额=余额+(赔率*100) 结束 下面是我当前查询的输出: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
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如果你发布了一个示例数据(例如,这里:)帮你做这件事会容易得多,