Mysql
 sql >> Base de données >  >> RDS >> Mysql

php mysql recherche plein texte plusieurs tables jointes par id

Vous pouvez créer une "vue matérialisée".http://en.wikipedia.org/wiki/Materialized_view

essentiellement une table qui est les résultats du JOIN, et la création d'un index de texte intégral à ce sujet.

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) 

Vous pouvez alors exécuter des requêtes sur cette table à la place..

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

mais...

Vous devrez mettre à jour la table périodiquement (ou lorsque les tables sous-jacentes sont mises à jour) - le plus simple est simplement de DROP et recréer - Ou vous pouvez utiliser TRUNCATE puis INSERT INTO ... SELECT ... FROM ... format.

(des schémas plus élaborés impliquent des déclencheurs pour maintenir la "vue" à jour, ou même regarder le binlog et relire les mises à jour par rapport à la "vue")