2012-11-18 2 views
1

"tags"라는 테이블이 있습니다.이 테이블에는 ID, 값, 값이 고유 키인 3 개의 열이 있습니다.쿼리 성능 - MySQL

우리 회원들은 좋아하는 음악을위한 태그를 입력해야합니다. 우리는 "members.favorites"테이블에 각 회원 태그를 저장하고, "tags"테이블을 자동 제안합니다.

회원 즐겨 찾기 : "song1, song2, song3", 우리는 그 값을 "members.favorites"에 정확하게 입력합니다. 이제 "tags"를 넣을 때 ',' 이를 "태그"에 삽입하면 "태그"는 "노래 1", "노래 2", "노래 3", "집계 = 1"의 3 행을 얻습니다. 이제 다른 회원이 와서 "노래 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 개의 좋아하는 노래를 가지고있을 수 있으며 위의 코드는 최상의 성능을 내지 못하는 것 같습니다. 누구나 개선 할 아이디어가 있습니까? 당신은 INSERT ... ON DUPLICATE KEY UPDATE 구문

답변

1

당신은 UPSERT라는 명령이 필요합니다.
MYSQL에서는 INSERT ... ON DUPLICATE를 사용하거나 REPLACE 구문을 사용할 수 있습니다.

0

을 사용할 수 있습니다

감사