Mysql
 sql >> Datenbank >  >> RDS >> Mysql

php mysql Volltextsuche mehrere Tabellen verbunden durch ID

Sie könnten eine 'materialisierte Ansicht' erstellen.http://en.wikipedia.org/wiki/Materialized_view

im Grunde eine Tabelle, die die Ergebnisse des JOINs enthält, und darauf einen Volltextindex erstellen.

CREATE TABLE materialized (FULLTEXT idx (user_name,department_name)) 
 SELECT u.id,user_name,department_name 
 FROM users u INNER JOIN departments d ON (d.id = dept_id) 

Sie können dann stattdessen Abfragen für diese Tabelle ausführen..

SELECT * FROM materialized WHERE MATCH(user_name,department_name) AGAINST('test' IN BOOLEAN MODE)

aber...

Sie müssen die Tabelle regelmäßig aktualisieren (oder wenn die zugrunde liegenden Tabellen aktualisiert werden) – am einfachsten ist es einfach DROP und neu erstellen - Oder Sie können TRUNCATE verwenden dann INSERT INTO ... SELECT ... FROM ... Format.

(Ausgefeiltere Schemata beinhalten Trigger, um die 'Ansicht' auf dem neuesten Stand zu halten, oder sogar das Binlog zu beobachten und Aktualisierungen für die 'Ansicht' abzuspielen)