数据库故障 - 不同行中的值相同

时间:2013-03-17 23:18:37

标签: php mysql

我正在尝试让我的投票系统运作。我有3个数据库表: 用户,帖子,投票

表用户将字段用户名作为主键。 table post将post_id作为主键。 (有更多字段,但它们不影响问题/问题)

在投票表中,我有3个字段:username, post_id, vote。投票是enum ('positive', 'negative')。我想要实现的是,如果用户投票选择页面上显示的特定帖子,则查询:INSERT INTO votes ('username','post_id','vote') VALUES('$user_name','$post_id', 'positive');将被执行。

如果我们说用户123123尚未投票支持任何帖子,那么它就有效。当这个用户投票时,对于帖子1说,这个查询工作正常。但是如果这个用户想要为不同的帖子投票,(他的投票得到了计算 - 我只是复制了部分代码不起作用,其余部分很好并且正常工作)插入查询得不到执行。如果用户abcd想要为特定帖子投票,则此功能再次正常,但只能执行一次。在我看来,数据库存在某种问题,因此只能有一个具有相同usernamepost_id的条目。如果我希望一个用户能够为多个帖子投票,我该如何解决这个问题?对此有更好的策略吗?

if($runloggedin->num_rows == 1)
{
    // If there was no vote for the current posting, then execute this query
    $query = "SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."'";         //get username and the post id
    $result = $mysqli->query($query);
    $query1 = "SELECT * FROM votes WHERE post_id='".$post_id."' AND username='".$user_name."'";         //check if there is a vote for this post already
    $result1 = $mysqli->query($query1);

    if ($result->num_rows == 1 && $result1->num_rows == 0)
    {
        $vote = "INSERT INTO votes ('username','post_id','vote') VALUES('$user_name','$post_id', 'positive')";          // this isn't working. everything else seems to be working (still test it more)
        $savevote = $mysqli->query($vote);
        $addvote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'";
        $runvote = $mysqli->query($addvote);
        echo "Thank you for your vote";
    }
}

1 个答案:

答案 0 :(得分:0)

如果没有看到votes表的创建方式,我的猜测是username已设置为主键。这将使第一个INSERT工作,但所有未来的工作都会失败。您需要做的是将其更改为username& post_id是主键

ALTER TABLE  `votes` DROP PRIMARY KEY , ADD PRIMARY KEY (  `username`, `post_id` )