2012-03-05 6 views
0

뉴스 표가 포함 된 표가 있는데이 표의 필드 중 하나는 쉼표로 구분 된 태그 목록이 포함 된 '태그'입력란입니다. - 왜이 경우와 관련이 없습니까? 기존 테이블이며 태그를 다른 테이블로 포팅 할 수 없으며 테이블 구조 나 앱의 기능을 변경할 수 없습니다.태그 목록으로 관련 게시물 찾기

비슷한 태그가있는 게시물을 찾기 위해 데이터베이스를 쿼리하는 가장 좋은 방법을 결정하려고합니다.

누군가가 태그 필드를 분할하고 트리밍하고 LIKE 쿼리를 수행하는 것보다 나은/똑똑한 솔루션을 갖고 있습니까?

+0

과 같은 검색을 수행 할 수 있습니다. –

+0

나는 완전히 동의하지만, 내 손이 빠져서, 내가 할 수있는 일이 많지 않다. 나는 레거시 이슈를 해결할 필요가있다. 나중에 db 디자이너를 저주 할 것이다. :) 정확히 내가 피하려고하는 해결책 인 –

답변

0

tags 테이블을 만들고 tagsposts 테이블 사이에 many to many tags_posts 테이블을 만들 수 있습니다.

그런 다음 posts.tags 열을 tagstags_posts으로 마이그레이션 할 수 있습니다.

마지막으로 posts.tags 대신 tags_posts을 쿼리 할 수 ​​있습니다.

+0

, 나는 또한 응용 프로그램의 주요 부분을 업데이 트해야합니다. 안타깝게도 데이터베이스에있는 것처럼 물건을 그대로 두는 것이 필요합니다. –

+0

posts.tags를 기반으로 tags_posts 및 태그를 업데이트하는 cron 작업은 어떻게됩니까? posts.tags는 전체 애플리케이션을 업데이트 할 때까지 보관하고 tags_posts를 바로 사용할 수 있습니다. – jpic

+0

전체를 포팅하는 것보다 약간 더 나은 옵션이지만, 이중성은 일종의 불쾌한 생각입니다. 그렇죠? –

1

DB를 건드릴 수없는 경우 DB 외부에 추가 검색 색인을 추가 할 수 있습니까? 예 : 루씬이나 스핑크스? 우리는 데이터의 잠재적으로 많은 양에 대해 이야기하지 않을 경우

, 당신도 외부 서비스/소프트웨어없이 루씬 인덱스를 구현하기 위해 ZF에서 Zend_Search_Lucene를 사용할 수있는 태그에 의해 할 수 있습니다 인덱스 게시물, 다음 등

설치, 색인을 사용하여 특정 태그 (또는 태그 및 기타 속성의 조합)가있는 게시물을 찾고 Lucene에서 반환 한 ID를 기반으로 DB에서 관련 결과를 가져옵니다.

0

스핑크스/루씬 아키텍처로 이동하려면 몇 가지 작업이 필요합니다. 그러면 태그를 별도의 테이블로 옮기는 것이 더 어려워 질 것입니다. 모든 문자열을 파싱하지 않고 모든 문자열을 파싱하는 대신 가장 간단한 솔루션으로 WHERE instr(concat(",", tags_field,","), ',php,') > 0