1

我们有一个名为“tags”的表,它有 3 个列:id、value、count,其值是唯一键。

我们的成员应该为他们最喜欢的音乐输入标签,我们将把每个成员标签保存在“members.favorites”表中,对于我们查询“tags”表的自动建议。

现在成员最喜欢的是:“song1,song2,song3”,我们把这个值放在“members.favorites”中,现在为了放入“tags”,我们将用','爆炸并将其插入"tags",所以 "tags" 得到 3 行,分别是 "song1"、"song2"、"song3" 和 "count=1",现在另一个成员来输入 "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 DUPLICATE KEY UPDATE语法

于 2012-11-18T09:42:27.663 回答
0

您需要名为 UPSERT 的指令。
在 MYSQL 上,您可以使用 INSERT... ON DUPLICATE 或者您可以使用 REPLACE 语法

于 2012-11-18T09:43:53.270 回答