我对从头开始创建这样的功能来学习很感兴趣,我很难理解并能够规划这样的结构。我所见过的大多数程序员都会检查是否有人已经通过他们的 IP 地址对评论或帖子进行了评分,我特别不喜欢这样,因为每个用户都必须登录才能投票,所以为什么不检查用户 ID 而不是知识产权。我也倾向于选择性能而不是外观,所以有人可以帮助我了解如何开始实现这一目标。我已经阅读并搜索了许多关于 SO(StackOverflow) 的帖子,但它们对我来说并不太全面。我还在某处读到有一个 UNIQUE KEY 约束只允许一票,对吗?
关于表结构以及如何设计的一些建议将不胜感激。
我对这种结构感到困惑,下表是我到目前为止所得到的。
Posts:
post_iD | message | uid_fk(user id) | voteUp | voteDown
PostsRateSystem:
rate_iD | rate_user_iD(uid_fk from posts table) |
我什至需要第二张表来跟踪谁进行了评分。
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));
}
}