0

こんにちは、このサイトが私を助けてくれた単純な 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());  


} 

どうすればそれを行うことができますか?現時点では挿入を続けているためですが、それが必要なので、ユーザーが報酬を持っている場合は、そのユーザーに対して挿入を行わないでください。報酬は $reward の横に保存されます。

4

2 に答える 2

4

あなたが探しているのは、 INSERT ... ON DUPLICATE KEY UPDATEUNIQUE KEYとの組み合わせです。

また、古いmysql_*関数を使って新しいコードを書くのもやめてください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています。代わりに、準備済みステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決定できない場合は、この記事が選択に役立ちます。学習したい場合は、ここに PDO 関連の非常に優れたチュートリアルがあります。

于 2012-05-19T12:51:31.890 に答える
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());    
    }
}

これを試してみてください。

于 2012-05-25T11:02:49.513 に答える