php投票系统-数据库故障


php voting system - database trouble

我正在为我的网站制作一个投票系统。我不知道如何设置数据库表,这样一个用户就可以喜欢或不喜欢某个帖子(他可以喜欢/不喜欢任何其他帖子(但只有一次-不能不止一次喜欢/不讨厌一个帖子(。

我有一个用户表,其中"username"是主键
然后我有一个posts表,它有以下列:post_text、timestamp、post_id(这是主键(、user_name(FK是用户表中的用户名(、category、posvotes、negvotes
最后一个表是votes表:username(FK来自用户表中(、post_id(FK为posts表中的post_id(、votedpos、votedneg。
我真的不确定这张桌子的设置是否正确。

这是我的php代码:(这是一个旧代码,查询将更改为mysqli语句,所以不要介意不推荐使用的mysql语句(
$post_id和$user_name工作正常,并且具有当前用户名和post_id。

$post_id = $_SESSION['post_id'];
$user_name = $_SESSION['user_name'];
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND(SELECT * FROM votes WHERE post_id='".$post_id."' AND votedpos=0)"))
{
$vote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'"; 
$runvote = mysql_query($vote) or die("error");
$safe = "UPDATE votes SET votedpos=1 WHERE post_id='".$post_id."'";
$runsafe = mysql_query($safe);
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND(SELECT * FROM votes WHERE votedpos>0 AND username='".$user_name."')"))      //if u +voted, then fail
{
    echo "cant vote twice";
}
else
{
    if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND (SELECT * FROM votes WHERE negvotes>0 AND username='".$user_name."')"))     //if u negvoted previously, change your vote to plusvote
    {
        $vote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'"; 
        $runvote = mysql_query($vote);
        mysql_query("UPDATE posts SET negvotes=negvotes-1 WHERE post_id='".$post_id."'");
        mysql_query("UPDATE votes SET votedneg=0 WHERE post_id='".$post_id."'");
        $safe = "UPDATE votes SET votedpos=1 WHERE post_id='".$post_id."'";
        $runsafe = mysql_query($safe);
    }
}
}

对于不喜欢一个帖子,我有相同的脚本(除了赞成票是反对票的地方(。但我无法让这个工作,也不知道我的表设置是错误的还是我的php编码。

如果您将投票表更改为使用username和post_id作为主键,并使用enum(vote_up,neutral,vote_down(作为投票值,那么似乎可以解决问题,而无需将逻辑推入PHP并轮询现有数据的状态。