par
Berzemus » 16 sept. 2009, 15:39
Nul besoin de donner un nom à l'index fulltext, simplement définir quels champs seront utilisés suffit.
CREATE TABLE `IWgalerie` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`type` varchar(40) collate latin1_german2_ci default NULL,
`ref` varchar(20) collate latin1_german2_ci default NULL,
`exemple` varchar(20) collate latin1_german2_ci default NULL,
`alt` text collate latin1_german2_ci,
`photoref` varchar(255) collate latin1_german2_ci default NULL,
`photoex` varchar(255) collate latin1_german2_ci default NULL,
PRIMARY KEY (`id`),
FULLTEXT (`type`,`ref`,`exemple`,`alt`)
) ENGINE=MyISAM AUTO_INCREMENT=86 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=86 ;
Ensuite, une requête telle que celle-ci devrait fonctionner:
select * from IWgalerie where match(`type`,`ref`,`exemple`,`alt`) against ('mots')
select * from IWgalerie where match(`type`,`ref`,`exemple`,`alt`) against ('mots' IN NATURAL LANGUAGE MODE)
Et même avec un score:
select id, match(`type`,`ref`,`exemple`,`alt`) from IWgalerie where match(`type`,`ref`,`exemple`,`alt`) against ('mots')
Et ainsi de suite, match() against() te donne une infinie suite de possibilité et d'optimisations.
Le mieux, ceci dit, est d'ajouter un champ TEXT à ta table dans laquelle tu concatène tous les champs qui t'intéressent, sous forme normalisée, pour rendre l'indexation et la recherche plus rapide.
Nul besoin de donner un nom à l'index fulltext, simplement définir quels champs seront utilisés suffit.
[sql]CREATE TABLE `IWgalerie` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`type` varchar(40) collate latin1_german2_ci default NULL,
`ref` varchar(20) collate latin1_german2_ci default NULL,
`exemple` varchar(20) collate latin1_german2_ci default NULL,
`alt` text collate latin1_german2_ci,
`photoref` varchar(255) collate latin1_german2_ci default NULL,
`photoex` varchar(255) collate latin1_german2_ci default NULL,
PRIMARY KEY (`id`),
FULLTEXT (`type`,`ref`,`exemple`,`alt`)
) ENGINE=MyISAM AUTO_INCREMENT=86 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=86 ;[/sql]
Ensuite, une requête telle que celle-ci devrait fonctionner:
[sql]select * from IWgalerie where match(`type`,`ref`,`exemple`,`alt`) against ('mots')[/sql]
[sql]select * from IWgalerie where match(`type`,`ref`,`exemple`,`alt`) against ('mots' IN NATURAL LANGUAGE MODE)[/sql]
Et même avec un score:
[sql]select id, match(`type`,`ref`,`exemple`,`alt`) from IWgalerie where match(`type`,`ref`,`exemple`,`alt`) against ('mots')[/sql]
Et ainsi de suite, match() against() te donne une infinie suite de possibilité et d'optimisations.
Le mieux, ceci dit, est d'ajouter un champ TEXT à ta table dans laquelle tu concatène tous les champs qui t'intéressent, sous forme normalisée, pour rendre l'indexation et la recherche plus rapide.