そういう機能をゼロから作って学ぶのは面白いのですが、そういう構造を理解して計画するのに苦労しています。私が見たほとんどのプログラマーは、誰かがすでにコメントや投稿を評価しているかどうかを IP アドレスでチェックしています。特に、各ユーザーがログインして投票する必要があるという事実のために、私はそれを嫌います。 iP。また、私はルックスよりもパフォーマンスを選ぶ傾向があるので、これを達成する方法を誰かが理解するのを手伝ってくれませんか. SO(StackOverflow) に関する多くの投稿を読んで検索しましたが、それらは私にとって包括的ではありません。また、1 票のみを許可する UNIQUE KEY 制約があることをどこかで読みましたが、それは正しいですか?
テーブル構造に関するいくつかの提案と、おそらく設計方法を教えていただければ幸いです。
私はそのような構造と混同しています。次の表は私がこれまでに得たものです。
Posts:
post_iD | message | uid_fk(user id) | voteUp | voteDown
PostsRateSystem:
rate_iD | rate_user_iD(uid_fk from posts table) |
誰が評価したかを追跡するために、2 つ目のテーブルが必要ですか?
if(isset($_POST['plus']) && isset($_POST['minus'])){
$plus = $_POST['plus'];
$minus = $_POST['minus'];
$row = insertRate($post_iD, $plus, $minus);
}
<form method="post" action="">
<a href="javascript:;" name="plus" id="<?php echo $row['post_iD'];?>">Thumbs Up</a>
<a href="javascript:;" name="minus" id="<?php echo $row['post_iD'];?>">Thumbs Down</a>
function insertRate($post_iD, $plus, $minus)
{
if($plus)
{
$sth = $this->db->prepare("UPDATE posts SET voteUp = 1 WHERE post_iD = :postiD");
$sth->execute(array('postiD' => $post_iD));
}
if($minus)
{
$sth = $this->db->prepare("UPDATE posts SET voteDown = 1 WHERE post_iD = :postiD");
$sth->execute(array('postiD' => $post_iD));
}
}