MySQL no puede indexar vistas, por lo que lo que desea es imposible en MySQL .
Puede usar un motor de indexación de texto completo externo como Sphinx y cargar datos allí usando una consulta con JOINS
Alternativamente, puede crear una tabla desnormalizada:
CREATE TABLE ftsearch
(
teacherId INT PRIMARY KEY,
teacherBiography TEXT,
subject1 TEXT,
subject2 TEXT,
subject3 TEXT,
)
ENGINE=MyISAM
y rellénelo con esta consulta:
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
oportunamente.
En realidad, si todas sus tablas son MyISAM , puede aplicar consultas de búsqueda de texto completo (en modo booleano) a una combinación, sin tener que crear un índice de texto completo.
Diga, si está buscando '+Jones +math +physics' , donde Jones es el apellido de un profesor y math y physics son temas, puedes hacer esta consulta:
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)
El MATCH(teacherBiography) AGAINST ('+Jones') utilizará un FULLTEXT índice en teacher , Si alguna; el segundo MATCH filtrará finamente los resultados.
Consultas relacionadas con OR Sin embargo, las condiciones o la clasificación por relevancia son más complejas.