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

Plusieurs colonnes dans MATCH CONTRE

Les colonnes nommées à l'intérieur de MATCH() doivent être les mêmes colonnes définies précédemment pour un index FULLTEXT. Autrement dit, l'ensemble de colonnes doit être le même dans votre index que dans votre appel à MATCH() .

Ainsi pour rechercher deux colonnes, vous devez définir un index FULLTEXT sur les deux mêmes colonnes, dans le même ordre.

Ce qui suit est correct :

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Ce qui suit est faux car MATCH() fait référence à deux colonnes mais l'index est défini pour une seule colonne.

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Ce qui suit est faux car MATCH() fait référence à deux colonnes mais l'index est défini pour trois colonnes.

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2, column3);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Ce qui suit est faux car MATCH() fait référence à deux colonnes mais chaque index est défini pour une colonne.

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1);
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column2);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Ce qui suit est faux car MATCH() fait référence à deux colonnes mais dans le mauvais ordre :

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2);

SELECT ID FROM table1 WHERE MATCH(column2, column1) AGAINST ('text')

En résumé, l'utilisation de MATCH() doit référencer exactement les mêmes colonnes, dans le même ordre, qu'une définition d'index de texte intégral.