Php mysql计算两个数字之间的差异

Php mysql计算两个数字之间的差异,php,mysql,sql,Php,Mysql,Sql,我有一个博客。我写了一个简单的投票系统。这个想法我可能错了。我有一张这样的桌子 id标题文章Totalvotesum 如果有人对文章投了赞成票,则得到1分;如果有人对文章投了反对票,则VoteSum cloumn得到1分 当我显示文章的投票时,我会这样做 <?php $Vote = $ROW['TotelVotes']-$ROW['VoteSum']; ?> 当我这样做的时候,我会收到像18446744073709551615这样的数字,例如当TotalVotes小于VoteSum

我有一个博客。我写了一个简单的投票系统。这个想法我可能错了。我有一张这样的桌子

id标题文章Totalvotesum

如果有人对文章投了赞成票,则得到1分;如果有人对文章投了反对票,则VoteSum cloumn得到1分

当我显示文章的投票时,我会这样做

<?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
      之前,将计算差异(或尝试计算差异)。