Php mysql计算两个数字之间的差异
我有一个博客。我写了一个简单的投票系统。这个想法我可能错了。我有一张这样的桌子 id标题文章Totalvotesum 如果有人对文章投了赞成票,则得到1分;如果有人对文章投了反对票,则VoteSum cloumn得到1分 当我显示文章的投票时,我会这样做Php mysql计算两个数字之间的差异,php,mysql,sql,Php,Mysql,Sql,我有一个博客。我写了一个简单的投票系统。这个想法我可能错了。我有一张这样的桌子 id标题文章Totalvotesum 如果有人对文章投了赞成票,则得到1分;如果有人对文章投了反对票,则VoteSum cloumn得到1分 当我显示文章的投票时,我会这样做 <?php $Vote = $ROW['TotelVotes']-$ROW['VoteSum']; ?> 当我这样做的时候,我会收到像18446744073709551615这样的数字,例如当TotalVotes小于VoteSum
<?php
$Vote = $ROW['TotelVotes']-$ROW['VoteSum'];
?>
当我这样做的时候,我会收到像18446744073709551615这样的数字,例如当TotalVotes小于VoteSum时
数据类型为INT无符号
我做错了什么?你能帮帮我吗?谢谢。如果
SELECT IF(TotalVotes >= VoteSum, TotalVotes-VoteSum, VoteSum-TotalVotes) AS diff
FROM `articles`
ORDER BY `diff` DESC
更新
如果要获取负值,请将这些列设置为INT-SIGNED
,以便获取负值。并直接运行您自己的查询
SELECT TotalVotes-VoteSum AS diff
FROM `articles`
ORDER BY `diff` DESC
- 如果
SELECT IF(TotalVotes >= VoteSum, TotalVotes-VoteSum, VoteSum-TotalVotes) AS diff
FROM `articles`
ORDER BY `diff` DESC
更新
如果要获取负值,请将这些列设置为INT-SIGNED
,以便获取负值。并直接运行您自己的查询
SELECT TotalVotes-VoteSum AS diff
FROM `articles`
ORDER BY `diff` DESC
ABS
SELECT ABS(TotalVotes-VoteSum) AS diff
FROM `articles`
ORDER BY `diff` DESC
使用数学函数
ABS
SELECT ABS(TotalVotes-VoteSum) AS diff
FROM `articles`
ORDER BY `diff` DESC
试试这个:
SELECT cast(TotalVotes as int)-cast(VoteSum as int) AS diff
FROM `articles`
ORDER BY `diff` DESC
如果签名问题在数据库中,这将修复该问题。默认情况下,int
数据类型是有符号的(在MySQL和我所知道的所有其他数据库中)。尝试以下方法:
SELECT cast(TotalVotes as int)-cast(VoteSum as int) AS diff
FROM `articles`
ORDER BY `diff` DESC
如果签名问题在数据库中,这将修复该问题。默认情况下,
int
数据类型是有符号的(在MySQL和我所知道的所有其他数据库中)。Try……或者这可能是一个问题,因为列的数据类型。TotalVotes和VoteSum的数据类型是什么?第二个问题,您希望能够检索负值,不是吗?数据类型是INT UNSIGNEDTry……或者这可能是一个问题,因为列的数据类型。TotalVotes和VoteSum的数据类型是什么?第二个问题,您希望能够检索负值,不是吗?数据类型是INT UNSIGNEDTry最好的答案!比我先找到最好的答案!打败我it@Cthulhu,标记为mysql和ABS()
的OP是合法功能。但是OP的问题在于未签名的数据类型。如果我在你的小提琴中设置了unsigned
,我会得到一个错误:。@Cthulhu,你看到OP更新的日期和我回答问题的日期了吗。即使在问题的第一次修订中,问题显然是溢出的,使用ABS
也不能假设有帮助,因为如前所述,在传递给ABS
@Cthulhu之前,将计算差异(或尝试计算差异),标记为mysql和ABS()
的OP是合法函数。但是OP的问题在于未签名的数据类型。如果我在你的小提琴中设置了unsigned
,我会得到一个错误:。@Cthulhu,你看到OP更新的日期和我回答问题的日期了吗。即使在问题的第一次修订中,问题显然是溢出的,使用ABS
也不能假设有帮助,因为如前所述,在传递到ABS
之前,将计算差异(或尝试计算差异)。