간결하게 : 해당 작업을 수행하려면 해당 데이터를 저장하지 마십시오. 당신은 당신의 데이터를 정상화하고, 정규화 된 데이터를 사용하여 검색 :
CREATE TABLE Blog
(
id INTEGER NOT NULL PRIMARY KEY,
title VARCHAR(30) NOT NULL
);
INSERT INTO Blog(id, title) VALUES(1, 'Hello');
INSERT INTO Blog(id, title) VALUES(2, 'Google');
INSERT INTO Blog(id, title) VALUES(3, 'Microsoft');
CREATE TABLE BlogKeywords
(
id INTEGER NOT NULL,
keyword VARCHAR(20) NOT NULL,
PRIMARY KEY(keyword, id)
);
INSERT INTO BlogKeywords(id, keyword) VALUES(1, 'hello');
INSERT INTO BlogKeywords(id, keyword) VALUES(1, 'world');
INSERT INTO BlogKeywords(id, keyword) VALUES(1, 'test');
INSERT INTO BlogKeywords(id, keyword) VALUES(2, 'search');
INSERT INTO BlogKeywords(id, keyword) VALUES(2, 'email');
INSERT INTO BlogKeywords(id, keyword) VALUES(2, 'security');
INSERT INTO BlogKeywords(id, keyword) VALUES(3, 'clippy');
INSERT INTO BlogKeywords(id, keyword) VALUES(3, 'collaboration');
CREATE TABLE Category
(
id INTEGER NOT NULL,
keyword VARCHAR(20) NOT NULL,
PRIMARY KEY(id, keyword)
);
INSERT INTO Category(id, keyword) VALUES(1, 'test');
INSERT INTO Category(id, keyword) VALUES(1, 'world');
INSERT INTO Category(id, keyword) VALUES(1, 'clippy');
은 이제 간단한 사용하여 쉽게 검색 할 수 있습니다 조인 :
SELECT DISTINCT b.id AS BlogID, b.Title, c.id AS CategoryID
FROM Blog AS b
JOIN BlogKeywords AS K ON b.id = k.id
JOIN Category AS C ON k.keyword = c.keyword;
당신이 있는지 확인하고자했던 것과 완전히 명확하지 않다가 여러 범주였습니다.
언제든지이 데이터 모델을 변경할 수 있습니까? 보다 효율적인 검색을 위해 더 나은 저장 방법이 있습니다. – Paddy
내 머리 꼭대기에서 나는 잘 모르겠다. 그러나 나는 susbtring 기능이 아마도 당신에게 매우 유용 할 것이라고 생각한다. 여기에 더 많은 문자열 함수가 있습니다. http://dev.mysql.com/doc/refman/5.0/en/string-functions.html 장기적인 해결책은 키워드를 별도의 테이블로 리팩터링 한 다음 blogs_keywords 테이블을 사용하여 블로그 ID와 키워드 ID의 쌍. – FrustratedWithFormsDesigner
알아,하지만 변경할 수는 없어. 내가 현재 할 수없는 많은 엉망이 정리 될 필요가 있습니다. – HyderA