【发布时间】:2013-07-02 04:51:04
【问题描述】:
我有兴趣从头开始创建这样的功能来学习,我很难理解并能够规划这样的结构。我见过的大多数程序员 检查是否有人已经通过他们的 IP 地址对评论或帖子进行了评分,我特别不喜欢这样,因为每个用户都必须登录才能投票,所以为什么不检查 用户 ID 而不是 iP。我也倾向于选择性能而不是外观,所以有人可以帮助我了解如何开始实现这一点。我已经阅读并搜索了很多帖子 在 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));
}
}
【问题讨论】:
-
是的,如果您想防止重复评分,您需要跟踪谁评分了
-
我不能通过在 Posts 表中添加另一列来按用户 ID 进行比较吗?
-
只有1个人可以评分?
-
只评价一次,无论是向下还是竖起大拇指,如果他们想改变它,那么他们可以。
-
如果有多个用户对帖子进行评分,则需要第二张表