1

私はブログを持っています。簡単な投票システムを書きました。私はその考えについて間違っているかもしれません。私はこのようなテーブルを持っています

id タイトル 記事 TotalVotes VoteSum

誰かが記事に賛成票を投じると、TotelVotes は 1 ポイントを獲得します 誰かが記事に反対票を投じると、VoteSum クローンは 1 ポイントを獲得します

記事の投票を表示するとき、私はこれを行います

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

問題なく動作しますが、トップページにトップ記事を表示したいので、このmysqlクエリを作成しました

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

これを行うと、次のような数字が表示されます

データ型は INT UNSIGNED です

私は何を間違っていますか?手伝っていただけませんか?ありがとう。

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

Use math function ABS

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