2012-11-18 103 views
1

我們有一個名爲「tags」的表,它具有3個列:id,value,count,其值爲唯一鍵。查詢性能 - MySQL

我們的會員應該爲自己喜歡的音樂輸入標籤,我們要將每個成員標籤保存在「members.favorites」表中,以便我們查詢「tags」表的自動建議。

現在成員最喜歡的是:「song1,song2,song3」,我們把這個值和「members.favorites」中的值完全相同,現在爲了放入「標籤」,我們要用''爆炸'並將其插入「標籤」中,因此「標籤」獲得3行爲「歌曲1」,「歌曲2」,「歌曲3」,「計數= 1」,現在另一個成員進入並輸入「歌曲3,歌曲4,歌曲5」這個分成「tags」,「song4」和「song5」將作爲一個新行插入,因爲它們不存在,但「song3」已經存在,我需要對「song3」做「count + 1」。

我的代碼是:

$tags_array = explode(',', $tags); 
foreach($tags_array as $key => $val){ 
    $check_if_already_exists = mysql_query("SELECT value FROM tags WHERE value = '$val'"); 
    if(mysql_num_rows($check_if_already_exists)){ 
     // This already exists, so count++ 
     mysql_query("UPDATE tags SET count = count+1 WHERE value = '$val'");  
    }else{ 
     // It's a new tag, insert 
     mysql_query("INSERT INTO tags (value, count) VALUES ('$val', '1')"); 
    } 
} 

但這似乎不知何故有線!每個用戶可能有20首喜歡的歌曲,上面的代碼似乎沒有最好的表現,有人有任何想法來改善這一點?

感謝

回答

0

你需要叫UPSERT指令。
在MYSQL上,您可以使用INSERT ... ON DUPLICATE,或者您可以使用REPLACE語法