이 질문에 대한 다양한 구체화가 이전에 여기에서 제기되었지만, 나는 또 다른 시도를 할 것이라고 생각했다.여러 컬럼에 걸친 mysql 키워드 검색
나는 끔찍한 데이터베이스 레이아웃을 가졌습니다. 하나의 엔티티 (위젯) 두 테이블로 분할 :이 덜 그 이상이었다
CREATE TABLE widgets (widget_id int(10) NOT NULL auto_increment)
CREATE TABLE widget_data ( widget_id int(10), field ENUM('name','size','color','brand'), data TEXT)
. 특정 이름, 색상 및 브랜드의 위젯을 찾으려면 widget_data 테이블에서 3 방향 조인을 수행해야했습니다. 그래서 합리적인 테이블 형식으로 변환 : 이것은 대부분의 질의가 훨씬 더합니다
CREATE TABLE widgets (widget_id int(10) NOT NULL auto_increment, name VARCHAR(32),size INT(3),color VARCHAR(16), brand VARCHAR(32))
. 그러나 그것은 더 열심히 검색합니다. 예를 들어 '% black %'의 위젯을 검색하고 싶다면 SELECT * FROM widget_data WHERE data LIKE '%black%'
일 것입니다. 이렇게하면 색상이 검은 색이거나 블랙웰 산업에 의해 만들어진 위젯의 모든 사례를 볼 수 있습니다. 심지어 어떤 분야가 일치하는지 정확히 알 수 있었고,이를 내 사용자에게 보여줄 수있었습니다.
새 테이블 레이아웃을 사용하여 유사한 검색을 수행하려면 어떻게해야합니까? 나는 당연히 WHERE name LIKE '%black%' OR size LIKE '%black%'...
을 할 수 있었다. 그러나 그것은 clunky하게 보인다. 그리고 나는 아직도 어느 분야가 필적하는지 모른다. 일치시키려는 각 열에 대해 별도의 쿼리를 실행할 수 있습니다.이 쿼리는 모든 일치 항목과 일치하는 항목을 제공하지만 실적이 좋을 것입니다. 어떤 아이디어?
해당 테이블이 innodb이므로 myisam으로 변경할 수 없습니다. 따라서 전체 텍스트 인덱스는 불행히도 옵션이 아닙니다. –
전체 텍스트 인덱스는 InnoDB 또는 MyISAM 테이블과 함께 사용할 수 있으며 CHAR, VARCHAR , 또는 TEXT 열. –