1

YahooAnswersのような質疑応答サイトを作っています。ユーザーが回答に投票できるポイントシステムが導入される予定ですが、トピックが削除された場合にユーザーが獲得したポイントを削除する必要があるかどうかはわかりません(また、トピックが削除された場合に削除されたポイントを追加し直す必要があります)投票)。これは私の主な質問につながります:これを行うための最良の方法は何でしょうか?

私はpointsテーブルを作成し、ユーザーがポイントを獲得するたびにテーブルに記録され、pointsテーブルの合計から加算/減算されusersます。

しかし、質問が削除された場合、獲得したポイントを差し引く(そして反対票で失ったポイントを追加する)にはどうすればよいでしょうか?

私のテーブルの構造は次のpointsとおりです(私はSHOW CREATE TABLE pointsクエリを実行しました):

CREATE TABLE `points` (
 `pid` int(11) NOT NULL AUTO_INCREMENT,
 `point_user` int(11) NOT NULL,
 `question_id` int(11) NOT NULL,
 `timestamp` int(25) NOT NULL,
 PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

そしてusersテーブル:

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `uid` int(11) NOT NULL,
 `fname` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
 `lname` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
 `username` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
 `password` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
 `confirm_key` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
 `email` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
 `user_pic` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
 `user_title` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
 `moderator` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'false',
 `deleted` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'no',
 `suspended` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'no',
 `points_count` int(11) NOT NULL DEFAULT 0,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

質問が削除された場合に、その質問で獲得/失ったポイントを削除/還元するのが良いかどうかはわかりません。

Stack Overflowがこれを行うことは知っていますが、はるかに高度なシステムがあります。

4

4 に答える 4

1

私の考えでは、管理上の変更のために、質問に答えるのに時間をかけた人はまだそれを獲得しました...私の意見だけです-私は間違っている可能性があります。

于 2012-05-18T01:25:01.133 に答える
1

削除の場合は返品ポイントを作成します。

あなたusersに私は2つの変更をお勧めします:

`moderator` tinyint(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 0,
`deleted` tinyint(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 0,
`suspended` tinyint(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 0,

この場合tinyintよりも良いと思います。varchar

また、その+ 1 / -1の質問をpointsテーブルに追加して、ポイントを返す必要があるときにユーザーを追跡できるようにします。iduser

于 2012-05-18T01:27:03.297 に答える
1

投稿を送信するのに費やした時間に対して、ユーザーはまだ報われるべきだと私は信じています。また、ユーザーグループが回答に反対票を投じるに値すると考える場合でも、ユーザーは「罰せられる」必要があります。回答/質問サイトのポイントシステムは、そのようなサイトの決定要因であることを忘れないでください。

削除された投稿でポイントを獲得したユーザーとの間でポイントを返す/取得する場合は、これがSQLで行う方法です。

SELECT u.user_id, SUM(//points awarded)
FROM points p
JOIN users u ON p.point_user = u.user_id
Group By p.point_user
于 2012-05-18T01:41:58.097 に答える
1

質問が削除されたときにポイントを削除したい場合、これを行うために私が考えることができる1つの方法は、データベーストリガーを使用することです。

テーブルでDELETEステートメントが実行されたときにトリガーを起動し、適切な再計算でテーブルをpoints更新して、テーブルの列が正しいことを確認できます。userstotalusers

質問が削除された場合にユーザーのポイントを変更することが「論理的」であるかどうかに関する質問については、サイトのロジックを実装しているので、それがあなたの好みです。:)

于 2012-05-18T01:57:20.797 に答える