2011-09-18 5 views
0

나는이 정규화 된 테이블 구조를 사용하여 태그 시스템을 설정하기 위해 찾고 있어요 : 내가하고 싶은 것은이있다,MySQL의 쿼리 도움

Table: Item 
Columns: ItemID, Title, Content 

Table: Tag 
Columns: TagID, Tag_Name 

Table: ItemTag 
Columns: ItemID, TagID 

항목 테이블 내 일반 정보 테이블 내 양식에 추가 단일 텍스트 필드를 추가하고 사용자에게 쉼표로 구분 된 태그를 삽입하도록 요청합니다. 일상에서 벗어나 웹 전체에서 본 것은 없습니다.

  1. 확인 이미 그들이 존재하지 않는 경우
  2. 그들을 추가 태그 테이블에 존재하지 않는 (: 내가 도움이 필요 무엇

    는 입력을 구분 쉼표들과 걸리는 쿼리입니다 tag_id는 자체 증분 필드입니다.)

  3. 입력 한 태그 id (신규 또는 기존)를 내 일반 정보 테이블의 ItemID와 연결합니다.

쉼표로 구분 된 값마다 루프를 도와 줄 수 있습니까?

감사 댄

답변

0

분할 당신에게 태그 이름의 배열을 제공하는 데이터베이스를 만지기 전에 /\s*,\s*/에 태그 목록을 표시합니다. 그런 다음 태그를 표준화하십시오 : 대문자, 소문자, 대문자 또는 대소 문자를 넣으십시오.

이제 데이터베이스에 사용할 준비가 된 태그가 있습니다. 이미 존재하는지 확인하는 것을 괴롭히지 마십시오. 대신 Tag.Tag_Name에 고유 색인을 추가하고 태그 목록의 모든 태그를 삽입하고 트랩하여 고유 위반 오류를 무시하십시오.

이제 각각의 태그에 대해이 작업을 수행하려면, 당신은 데이터베이스에있는 모든 태그를 가지고 있고 ItemTag을 채울 INSERT ... SELECT를 사용할 수 있습니다 $item_id는 질문 $tag에있는 항목의 ID입니다

insert into ItemTag (ItemId, TagID) 
select $item_id, TagID 
from Tag 
where Tag_Name = $tag 

항목에 첨부 할 특정 태그입니다.

+0

감사합니다. MU, 이것에 대해 알아 보겠습니다. 그래도 나를 데려 갈 수도 있습니다 :) – Dan