Pracuję na stronie internetowej, gdzie są dwie tabele, prawie identyczne, gdzie MECZ PRZECIWKO działa na jedną, ale nie na drugą. Aby dowiedzieć się, dlaczego starałem się ograniczyć to do prostego, "Zróbmy prostą tabelę" - ale tak nie jest.MECZ MySQL NIE DZIAŁA
Robię testowanie z phpMyAdminem i to jest MySQL 5.1.41.
Test buduję stosuje się następującą zdefiniować tabelę ...
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL,
`title` text NOT NULL,
`body` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE `test` ADD FULLTEXT (`title`, `body`);
i kiedy robić show indeks z testu widzę, że tam jest kluczowym FULLTEXT zawierający tytuł i ciało.
wstawić kilka wierszy z
INSERT INTO `test` (`id`, `title`, `body`) VALUES
('1', 'Lorem Ipsum', 'Lorem ipsum dolor sit amet, consectetur ... lacus porta euismod.'),
('2', 'Lorem Ipsum (cont)', 'Nunc leo massa, vulputate ... euismod fringilla.');
(niektóre zawartości ciała usunięte dla zwięzłość)
a kiedy biegnę
SELECT * FROM `test` WHERE MATCH (`title`, `body`) AGAINST ('consectetur');
dostaję pusty zestaw wyników - nie wiersze znalezione, ale jeśli działa
SELECT * FROM `test` WHERE `body` LIKE '%consectetur%';
, a następnie znaleziono rekord.
Chociaż mam duże doświadczenie z MySQL, po raz pierwszy użyłem MATCH, więc czy robię coś głupiego? Dlaczego to nie działa? Czy indeks musi zostać zbudowany (zrobiłem NAPRAWĘ na stole), czy to wszystko ma się wydarzyć automatycznie?
Tylko dla informacji, tabela, która działa jest określona z
CREATE TABLE IF NOT EXISTS `web_pages1` (
`id` int(11) NOT NULL,
`title` varchar(255) DEFAULT NULL,
`slug` varchar(255) DEFAULT NULL,
`meta_keywords` text,
`meta_description` text,
`snippet` text,
`body` mediumtext,
`created_by` int(11) DEFAULT NULL,
`date_created` datetime DEFAULT NULL,
`date_published` date DEFAULT NULL,
`author` varchar(255) DEFAULT NULL,
`edited_by` int(11) DEFAULT NULL,
`date_edited` datetime DEFAULT NULL,
`status` tinyint(4) NOT NULL DEFAULT '1',
`parent_id` tinyint(11) DEFAULT NULL,
`menu_id` int(11) DEFAULT NULL,
`short_name` varchar(255) DEFAULT NULL,
`sort_order` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `search` (`title`,`slug`,`meta_keywords`,`meta_description`,`snippet`,`body`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
i ten, który jest przyczyną mnie problemów i wysłał mnie na dół tej trasy jest
CREATE TABLE IF NOT EXISTS `web_news1` (
`id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL,
`meta_keywords` text,
`meta_description` text,
`snippet` text NOT NULL,
`body` text NOT NULL,
`created_by` int(11) NOT NULL,
`date_created` datetime NOT NULL,
`date_published` date DEFAULT NULL,
`author` varchar(255) DEFAULT NULL,
`edited_by` int(11) DEFAULT NULL,
`date_edited` datetime DEFAULT NULL,
`status` tinyint(4) DEFAULT '0',
PRIMARY KEY (`id`),
FULLTEXT KEY `search` (`title`,`slug`,`meta_keywords`,`meta_description`,`snippet`,`body`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Chociaż próbowałem definiowanie drugi dokładnie taki jak pierwszy i nadal nie działa.
Wielkie dzięki. To posortowało to. – Ken