2014-01-11 3 views
1

태그 시스템에서 작업 중이며 파악할 수없는 쿼리가 하나뿐입니다.
행 1 : PHP
행 2 : PHP, HTML
행 3 :여러 가지 방법으로 제거 SQL

테이블 열라는 태그가있는 예를 들어 이런 일이 있습니다 : HTML, CSS, 자바 스크립트
행을 여기에 내가 가진 무엇 4 : php, css

4 : php, html, javascript 및 css 만 반환하는 데 사용할 수있는 검색어는 무엇입니까?

미리 감사드립니다.

+3

절대 하나의 열에 여러 값을 저장하지 마십시오. 지금 보시다시피 두통이 생깁니다. 테이블을 먼저 표준화하십시오. –

+0

예, 정규화가 필요합니다. 저는 여러분의 테이블이 여러분이 예제에서 제시 한 값만 가지고 있지 않으며 여러분의 데이터가 증가할수록 더 복잡해질 것이라고 믿습니다. –

+0

여기에서 mysql 여러 컬럼 값을 검색하십시오. 같은 실수를 저지른 사람들로부터 많은 질문과 답변을 찾을 수 있습니다. –

답변

0

태그를 저장하는 방법은 실제로 매우 나쁩니다 (다른 곳에서 지적한대로). 게시물 post_tags (또는 그와 비슷한 것)에 각 게시물 (또는 무엇이든)과 게시물의 각 태그에 대한 행이 있어야합니다.

가끔은 이러한 데이터 구조를 제어 할 수 없습니다. 다음은 처음 세 개의 태그를 목록에서 가져 오는 방법입니다. 당신은 태그의 한정된 수의이 일반화 할 수 있어야한다 :

select distinct substring_index(substring_index(tags, ', ', n.n), ', ', -1) as tag 
from table t cross join 
    (select 1 as n union all select 2 union all select 3) n; 
-1

코드가 SQL Server에 대한 또 다른 접근 방식 -

DECLARE @tag_list VARCHAR(MAX) 
DECLARE @tag VARCHAR(MAX) 
DECLARE @tag_part VARCHAR(MAX) 
DECLARE @tag_part_len INT 

DECLARE tag_cursor CURSOR FOR 
SELECT tag 
FROM TagData 

OPEN tag_cursor 

FETCH NEXT FROM tag_cursor 
INTO @tag 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    IF @tag_list IS NULL 
    BEGIN 
     SET @tag_list = @tag 
    END 
    ELSE 
    BEGIN 
     WHILE(LEN(@tag)>0) 
     BEGIN 
      SET @tag_part_len = CHARINDEX(',',@tag,0) 

      IF @tag_part_len = 0 
      BEGIN 
       SET @tag_part_len = LEN(@tag)+1 
       SET @tag_part = SUBSTRING(@tag,0,@tag_part_len) 
       IF CHARINDEX(@tag_part,@tag_list,0) = 0 
        SET @tag_list = @tag_list + ', ' + @tag_part 
       SET @tag = '' 
      END 
      ELSE 
      BEGIN 
       SET @tag_part = SUBSTRING(@tag,0,@tag_part_len) 
       IF CHARINDEX(@tag_part,@tag_list,0) = 0 
        SET @tag_list = @tag_list + ', ' + @tag_part 
       SET @tag = REPLACE(@tag,@tag_part+',','') 
      END 
     END 
    END 
    FETCH NEXT FROM tag_cursor 
    INTO @tag 
END 

CLOSE tag_cursor 
DEALLOCATE tag_cursor 

SELECT @tag_list 
MySQL과 연동하여 작동하도록 변경해야
관련 문제