MySQL
无法索引视图,所以你想要的是不可能在MySQL
。
您可以使用那里查询中使用JOINS
或者像狮身人面像和加载数据的外部全文索引引擎,你可以创建一个非规范化的表:
CREATE TABLE ftsearch
(
teacherId INT PRIMARY KEY,
teacherBiography TEXT,
subject1 TEXT,
subject2 TEXT,
subject3 TEXT,
)
ENGINE=MyISAM
,并与此查询填满它:
INSERT
INTO ftsearch
SELECT teacherId, teacherBiography,
s1.name, s2.name, s3.name
FROM teacherProfile
LEFT JOIN
subject s1
ON s1.id = subjectOneId
LEFT JOIN
subject s2
ON s2.id = subjectTwoId
LEFT JOIN
subject s3
ON s3.id = subjectThreeId
及时。实际上,如果您的所有表格都是MyISAM
,则可以将全文搜索查询(以布尔模式)应用于连接,而不必创建全文索引。
说,如果你正在寻找'+Jones +math +physics'
,其中Jones
是老师的姓氏和math
和physics
是主体,你可以做到这一点查询:
SELECT teacherId, teacherBiography,
s1.name, s2.name, s3.name
FROM teacherProfile
LEFT JOIN
subject s1
ON s1.id = subjectOneId
LEFT JOIN
subject s2
ON s2.id = subjectTwoId
LEFT JOIN
subject s3
ON s3.id = subjectThreeId
WHERE MATCH(teacherBiography) AGAINST ('+Jones' IN BOOLEAN MODE)
AND MATCH(t.teacherBiography, s1.name, s2.name, s3.name) AGAINST ('+Jones +math +physics' IN BOOLEAN MODE)
的MATCH(teacherBiography) AGAINST ('+Jones')
将使用FULLTEXT
指数teacher
,如果任何;第二个MATCH
将精细过滤结果。
然而,涉及OR
条件或相关性排序的查询更复杂。
辉煌,感谢Quassnoi为您的出色反应。 – 2010-10-05 16:09:04
其实,如果我跳过全文搜索,如果没有最后三个字段的存在,我该如何进行查找?即获取视图的结果并对生物执行全文搜索? – 2010-10-05 16:10:35
@ Julian:查找什么? – Quassnoi 2010-10-05 16:11:15