1

id、value、countの3つの列を持つ「tags」という名前のテーブルがあります。値は一意キーです。

メンバーはお気に入りの音楽のタグを入力することになっています。「tags」テーブルにクエリを実行する自動提案のために、各メンバータグを「members.favorites」テーブルに保存します。

メンバーのお気に入りは次のとおりです。「song1、song2、song3」、「members.favorites」とまったく同じ値を入力します。「タグ」を配置するために、「、」で展開して挿入します。 「tags」なので、「tags」は「song1」、「song2」、「song3」、「count = 1」の3行になります。これで、別のメンバーが来て「song3、song4、song5」と入力し、これを「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のお気に入りの曲を持っている可能性があり、上記のコードは最高のパフォーマンスを持っていないようですが、これを改善するためのアイデアはありますか?

ありがとう

4

2 に答える 2

1

INSERT ... ON DUPLICATEKEYUPDATE構文を使用できます

于 2012-11-18T09:42:27.663 に答える
0

UPSERTと呼ばれる命令が必要です。
MYSQLでは、INSERT ... ON DUPLICATEを使用するか、REPLACE構文を使用できます。

于 2012-11-18T09:43:53.270 に答える