ホームページ  >  記事  >  バックエンド開発  >  メンバーの投票を 1 回のみに制限する、コメント/投票/ムード機能の最も問題のないメカニズムは何ですか?

メンバーの投票を 1 回のみに制限する、コメント/投票/ムード機能の最も問題のないメカニズムは何ですか?

WBOY
WBOYオリジナル
2016-06-23 13:51:05936ブラウズ

記事の下に、良いレビュー/悪いレビューなどのボタンが表示されるなど、いくつかのレビュー風のシステム

つまり、CSDN フォーラムの記事ページのような...
私にとって役に立った [0] ドロップレンガ [0]

個人的な理解:
クリックして AJAX/JQ 経由で PHP に送信し、MYSQL を操作し、良い/悪いレビューのフィールドを +1

ただし、一般に、この種のものは IP アドレスまたは Cookie のみに限定されます。 .. .

肯定的/否定的なレビューのデータが非常に正確で、水を含まない必要がある場合

メンバーとしてログインした後でのみコメントできるようにしたいのですが (投票は非常に悪いです)

mysql は必要ですか独立したレビュー フォームを推奨しますか?

また、メンバーが 1 回だけ投票できるようにデータを構造化するためのより良い方法はありますか? 何か良い提案があれば教えてください

ディスカッションに返信してください。 (解決策)
実際にはいろいろな方法がありますが、完全に別のテーブルを作成することができます。どの投稿、どのメンバー、何票が投じられたかを記録します。いつキャストされましたか? IPとか

次回投票する時は会員IDと投稿IDで投票状況が分かるんじゃないでしょうか?

テーブルを作成する必要があり、それは複数ある
○○は○○の後に続く、○○は○○の友達、など一連のニーズもあるかもしれないので

総合的に検討する必要がある

とはあなたが今考えているのはSNSサイトの中核(または(基本))

参考:

投票情報テーブル:


CREATE TABLE `votes` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `ip` varchar(250) NOT NULL,   ·uid· int(11) NOT NULL,   `vid` int(11) NOT NULL,   `fstcreate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,   PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8



記事テーブル

CREATE TABLE `article` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `article_title` varchar(250) NOT NULL,   `article_type` int(11) NOT NULL,   `article_content` longtext NOT NULL,   `article_author` varchar(50) NOT NULL,   `article_click_count` int(11) NOT NULL DEFAULT '0',   `status` int(11) NOT NULL DEFAULT '0',   `likes` int(11) DEFAULT '0',   `unlikes` int(11) DEFAULT '0',   `fstcreate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,   `lastmodify` datetime DEFAULT NULL,   PRIMARY KEY (`id`),   FULLTEXT KEY `fulltext_article_title` (`article_title`,`article_content`,`key_words`) ) ENGINE=MyISAM AUTO_INCREMENT=119 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='文章表'



ログインユーザーのみが投票できる場合の場合は、ユーザー ID と投票トピック ID を制御するだけで済みます。

同じ記事、同じユーザーは 1 回しか投稿できません。 ? 可 可可
ID

AID ?? ID

MID? 再送信できますか?


見てみると、COOKIE や IP だけで制限することはできません
SQL を使用する必要があります


しかし、パフォーマンスの問題があるので、質問したいことがあります

次の 2 つのオプションのどちらが良いですか?

A. 肯定的/否定的なコメントを記事テーブルの列に追加します

肯定的なレビューごとに、独立したフォームを追加するだけでなく、記事の肯定的/否定的なレビュー列に 1 を追加します

B. 独立したフォームを作成します肯定的/否定的なレビューのアクションを記録します

肯定的/否定的なレビューのたびに、新しいレコードがコメントテーブルに追加されます
ID (自動)
uid ユーザー ID
tid 記事 ID (トピック ID)
肯定的/否定的なレビューに投票します(1/0)

記事 tid=90
1 つの違い 違いはどれくらいですか
肯定的なレビューの数: select count(*) from `comment` where `tid`='90' and `vote` = '1'
否定的なレビューの数: select count(*) from `comment` where `tid` ='90' and `vote` = '1'




迷った点:
オプション A、毎回 +1 に行く.... トピックのコンテンツはコメントのデータ容量よりも明らかに大きいので、より多くのデータを消費するように感じますか?トピックを作成し、コメント テーブル内のコメントの数が tid に関連しているかを計算する必要はありません

オプション B、良いレビューの差は使用されません コメントする場合、トピックの操作は少なくなりますが、選択する場合... count(*) を毎回計算する必要があるようですが、平均 200 件の良いレビューと悪いレビューを持つ記事が 50,000 件ある場合、コメントにはすでに 1,000 万件のデータが含まれていると考えられます。 ??? それ以上の場合はどうなるでしょうか? それとも、何百万ものデータをカウントするのは耐えられないのでしょうか?

これら 2 つの SQL ソリューションに基づくキャッシュの問題については説明しません。 、どちらの方がリソースの消費が少ないでしょうか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。