먼저 많은 고맙습니다 내가 응답이 희망
...
, 당신은 FULLTEXT 인덱스를 지원하는 MySQL의에서 단 하나의 sicne MyISAM 스토리지 엔진을 사용해야합니다.
각각의 열에 하나씩 3 개의 전체 텍스트 색인을 작성하십시오.
SELECT 쿼리에서 WHERE 절과 ORDER BY 절의 3 개 열 각각에 대해 MATCH ... AGAINST ...를 수행하면 검색 용어가 하나 이상인 모든 행을 가져올 수 있습니다 3 개의 열 중에서 하나를 선택하고 검색 용어가 포함 된 열을 기준으로 정렬합니다.
CREATE TABLE IF NOT EXISTS your_table (
ChapterCol TEXT,
TextCol TEXT,
NoteCol TEXT,
FULLTEXT INDEX (ChapterCol),
FULLTEXT INDEX (TextCol),
FULLTEXT INDEX (NoteCol)
) Engine = MyISAM;
-- insert test values
insert into your_table (ChapterCol,TextCol,NoteCol) values ('foo','foo','foo'),
('financial blah blah','foo','foo'),('foo','financial blah blah','foo'),
('foo','foo','financial blah blah'),('financial blah blah','financial blah blah',
'financial blah blah');
-- insert filler
insert into your_table (ChapterCol,TextCol,NoteCol)
values (md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand()));
SELECT ChapterCol,TextCol,NoteCol
FROM your_table
WHERE MATCH (ChapterCol) AGAINST ('financial' IN BOOLEAN MODE)
OR MATCH (TextCol) AGAINST ('financial' IN BOOLEAN MODE)
OR MATCH (NoteCol) AGAINST ('financial' IN BOOLEAN MODE)
ORDER BY MATCH (ChapterCol) AGAINST ('financial' IN BOOLEAN MODE) DESC,
MATCH (TextCol) AGAINST ('financial' IN BOOLEAN MODE) DESC,
MATCH (NoteCol) AGAINST ('financial' IN BOOLEAN MODE) DESC;
더 나은 가독성을 위해 성냥에게 별칭을 제공하기 위해 더 좋을 수도 순서 절에 관하여 : 여기
은 예입니다 'WHERE MATCH (BOOLEAN MODE의'금융 ')에 대한 (TextCol) match_text'로 ... 그리고 나서'ORDER BY match_text DESC .... ' – acme안녕하세요. 'WHERE' 절에서 열을 별명으로 지정할 수 없습니다. 하위 쿼리를 사용하여 SELECT 절의 별칭을 지정한 다음 외 부 SELECT에서 해당 열을 제외 할 수는 있지만 쿼리가 길어지면 여전히 MATCH() 문을 복제해야합니다. 두 번째 복사본을'ORDER BY'에서'SELECT' 절로 옮기고 있습니다. –
아, 맞습니다. - WHERE 절에 있음을 알지 못했습니다. 설명해 주셔서 감사합니다! – acme