MySQL如果不存在行,则仅执行插入操作

时间:2012-05-19 12:49:37

标签: php mysql sql

您好,我有一个简单的SQL SELECT和INSERT,这个网站帮助了我,但现在我需要这样做,以便它只对那些不存在的行进行插入。

因此,如果该行在那里,则跳到下一行。我拥有它,所以当用户达到100次战斗时,它会给予奖励,但当然如果它继续进行插入,他们将获得100次奖励以进行相同的100次战斗。那么需要一些如何检查以确定用户是否获得了奖励然后再给它们呢?

// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM users where wins >= 100") 
or die(mysql_error());  


$reward = '100 battles won' ;
$rewardimage = 'chnage after' ;
echo "<table border='1'>";
echo "<tr> <th>username</th> <th>wins</th> </tr>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
    // Print out the contents of each row into a table



mysql_query("INSERT INTO User_Rewards 
(username, reward_name, reward_image) VALUES('".$row['username']."', '".$reward."', '".$rewardimage."' ) ") 
or die(mysql_error());  


} 

我将如何做到这一点?因为目前它只是继续进行插入但需要它,如果用户有奖励,那么不要为该用户插入。奖励存储在奖励的一边。

2 个答案:

答案 0 :(得分:4)

您要找的是 UNIQUE KEY INSERT ... ON DUPLICATE KEY UPDATE的结合。

另外,请停止使用古老的mysql_*函数编写新代码。它们已不再维护,社区已经开始deprecation process。相反,您应该了解prepared statements并使用PDOMySQLi。如果您无法决定,this article将有助于选择。如果您想学习,here is a quite good PDO-related tutorial

答案 1 :(得分:0)

while($row = mysql_fetch_array( $result )) {
    if(mysql_num_rows(mysql_query("select * from User_Resards where username='".$row['username']."' ")) == 0) {
        mysql_query("INSERT INTO User_Rewards (username, reward_name, reward_image) VALUES('".$row['username']."', '".$reward."', '".$rewardimage."' ) ") or die(mysql_error());    
    }
}

你可以试试这个。