2012-06-16 2 views
1

나는 stackoverflow의 태그처럼 쉼표로 구분 된 태그 목록을 받아들이는 HTML 폼을 가지고있다. 또한 각 사용자에게 속한 태그 목록을 포함하는 MySQL 테이블이 있습니다. 사용자는 자신의 프로필에서 태그를 업데이트 할 수 있습니다. 목록에 더 이상 존재하지 않으면 MySQL 테이블에서 태그를 자동으로 제거합니다.PHP를 사용하는 쉼표로 구분 된 목록을 MySQL 테이블과 비교하기

예를 들어, 사용자가 웹 양식에 다음을 입력합니다 :

trance, house, electronica, dubstep, club 

MySQL의 테이블은 그러나,이

userid tag 
1   trance 
1   house 
1   electronica 
1   dubstep 
1   garage 
내가 MySQL의에서 차고 태그를 제거하고 "클럽"대신을 추가 할

있습니다.

또한 이러한 태그는 위의 내 예제에서 순서대로 표시하면서, 이것은 항상 그렇지는 않을 것이다, 그래서 예를 들어, 모두 배열 인덱스 위치에 의존 할 수 있음을 주목할 필요가있다.

foreach를 사용하여 쉼표로 구분 된 목록을 반복하고 delete 문을 생성하고 모든 태그를 처음부터 다시 삽입 할 수 있음을 알고 있습니다. 그러나이 작업을 수행하는 데 아마도 좋은 방법이 있다고 생각합니다.

미리 알려 주셔서 감사합니다.

데이브

+1

IMO 필자는 주어진 사용자가 사용할 수있는 태그 목록 (표)을 만드는 것이 좋습니다. 특정 또는 모든 사용자에게 액세스 권한을 부여하여 새 태그를 만듭니다 (사용자 또는 관리자가 확인할 수있는 일종의 확인 대기열에 넣을 수 있음). 이렇게하면 문자열 처리 등을 할 필요가 없습니다. 사용자가 수많은 태그 등을 볼 수 있도록 자동 완성 기능을 사용할 수 있습니다. – Haroon

+0

그 제안에 감사드립니다. @Haroon +1 – Dave

답변

0

당신은 당신의 쉼표가 NOT IN() 절에 목록을 분리하고 다음과 같은 DELETE 문에서 사용 장소 (후 제대로 이스케이프 및 인용) 만 필요합니다. 순서는 중요하지 않습니다.

DELETE FROM tags WHERE userid = 1 AND tag NOT IN ('trance', 'house', 'electronica', 'dubstep', 'club'); 

어떻게 당신은 PDO, MySQLi, 또는 이전 (곧되지 예정) mysql_*() 기능 수, 탈출 및 사용중인 데이터베이스 API에 따라 달라집니다 쉼표로 구분 된 값을 인용 대해 이동합니다.

하나의 열에 CSV 목록으로 저장하는 대신 행당 하나씩 태그를 저장하여 올바른 결과를 얻었 음을 기억할 것입니다. 가정

+0

와우, 지금 바보 같아요. .. 나는 수면 부족의 나쁜 영향을 겪고 있다고 생각합니다! 하하 고마워요 @ 마이클 – Dave

0

  • , 관심의 이름에 사용할 수 쉼표 NOC
  • 가와 UNIQUE INDEX (사용자 ID, 태그) 테이블에이

같은
$s="trance, house, electronica, dubstep, club"; 
$userid=1; 

$s=explode(',',$s); 
$i=0; 
foreach($s as $ss) { 
    $ss=trim($ss); 
    //Escape the string according to your DB framework 
    //e.g. $ss=mysql_escape_string($ss); 
    $s[$i++]=$ss; 
} 

$ss=implode("','",$s); 
$sql="DELETE FROM tablename WHERE userid=$userid AND tag NOT IN('$ss')"; 
//Run $sql accodring to your DB framework 

if (sizeof($s)>0) { 
    $i=0; 
    foreach($s as $ss) $s[$i++]="'$userid','$ss'"; 
    $ss=implode('),(',$s); 
    $sql="INSERT IGNORE INTO tablename VALUES ($ss)"; 
    //Run $sql accodring to your DB framework 
} 
관련 문제