2012-05-19 75 views
0

你好我有一個簡單的SQL SELECT和INSERT,該站點幫助我解決了這個問題,但是現在我需要將它插入到不存在的行中。MySQL只有在行不存在的情況下執行插入操作

所以,如果行在那裏,然後跳到下一個。我擁有它,所以當用戶達到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()); 


} 

我怎麼會去這樣做?因爲目前它只是繼續插入但需要它,所以如果用戶有獎勵,那麼不要爲該用戶插入。獎勵存儲在$獎勵的方面。

+0

你看過觸發器,斷言和檢查嗎? – keyser

+0

嗯ive看着增加一個if語句的同時... – user1405062

+0

你需要閱讀基本的SQL,而不是PHP。 – keyser

回答

4

您要尋找的是UNIQUE KEY結合INSERT ... ON DUPLICATE KEY UPDATE

此外,請停止使用古代mysql_*功能編寫新代碼。他們不再維護和社區已經開始deprecation process。相反,您應該瞭解prepared statements並使用PDOMySQLi。如果你不能決定,this article將有助於選擇。如果你在意學習,here is a quite good PDO-related tutorial

+0

你可以關心解釋關於重複密鑰更新?我猜它只是檢查是否有所有準備好相同的結果,如果有它會更新?另外我猜UNIQUE KEY應該在mysql數據庫中? – user1405062

+0

@ user1405062:這是一個兩部分聲明,並要求表在該列上設置'UNIQUE KEY'約束。第一部分嘗試插入新數據,但是當您嘗試插入該'UNIQUE'列的現有值時,它會觸發查詢的第二部分,而該行將更新該行,並具有此'UNIQUE'值。只要閱讀我鏈接到的頁面,下面的文字和評論就會成爲例子。 –

+0

好吧,我嘗試做ALTER TABLE'User_Rewards' ADD UNIQUE( 'reward_name' ),但即時獲得#1062 - 關鍵1的重複條目'100戰爭勝利'該collum是var im gussing它需要是int? – user1405062

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());  
    } 
} 

你可以試試這個。

相關問題