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