1

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

id 标题文章 TotalVotes VoteSum

当有人对文章投赞成票时,TotelVotes 获得一分 如果有人对文章投反对票,则 VoteSum cloumn 获得 1 分

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

<?php
$Vote = $ROW['TotelVotes']-$ROW['VoteSum'];
?>

它工作得很好,但是在我的首页上我想显示热门文章,所以我做了这个 mysql 查询

SELECT TotalVotes-VoteSum AS diff FROM `articles` ORDER BY `diff`  DESC

当我这样做时,我会收到这样的数字 18446744073709551615 例如,当 TotalVotes 小于 VoteSum

数据类型是 INT 无符号

我做错了什么?请你帮助我好吗?谢谢。

4

3 回答 3

8

您可以使用IF

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
于 2013-01-24T15:08:57.670 回答
4

试试这个:

SELECT cast(TotalVotes as int)-cast(VoteSum as int) AS diff
FROM `articles`
ORDER BY `diff`  DESC

如果签名问题在数据库中,这将解决问题。默认情况下,int数据类型是有符号的(在 MySQL 和我知道的所有其他数据库中)。

于 2013-01-24T15:17:00.070 回答
1

使用数学函数ABS

SELECT ABS(TotalVotes-VoteSum) AS diff 
FROM `articles` 
ORDER BY `diff`  DESC
于 2013-01-24T15:10:31.743 回答