Ниже приведен дамп таблиц и данных, необходимых для понимания системы: -
Система состоит из репетиторов и классов.
Данные в таблице All_Tag_Relations хранят отношения тегов для каждого зарегистрированного преподавателя и каждого класса, созданного преподавателем. Отношения тегов используются для поиска классов.
CREATE TABLE IF NOT EXISTS `Tags` (
`id_tag` int(10) unsigned NOT NULL auto_increment,
`tag` varchar(255) default NULL,
PRIMARY KEY (`id_tag`),
UNIQUE KEY `tag` (`tag`),
KEY `id_tag` (`id_tag`),
KEY `tag_2` (`tag`),
KEY `tag_3` (`tag`),
KEY `tag_4` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `Tags` (`id_tag`, `tag`) VALUES
(1, 'Sandeepan'),
(2, 'Nath'),
(3, 'first'),
(4, 'class'),
(5, 'new'),
(6, 'Bob'),
(7, 'Cratchit');
CREATE TABLE IF NOT EXISTS `All_Tag_Relations` (
`id_tag` int(10) unsigned NOT NULL default '0',
`id_tutor` int(10) default NULL,
`id_wc` int(10) unsigned default NULL,
KEY `All_Tag_Relations_FKIndex1` (`id_tag`),
KEY `id_wc` (`id_wc`),
KEY `id_tag` (`id_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `All_Tag_Relations` (`id_tag`, `id_tutor`, `id_wc`) VALUES
(1, 1, NULL),
(2, 1, NULL),
(3, 1, 1),
(4, 1, 1),
(6, 2, NULL),
(7, 2, NULL),
(5, 2, 2),
(4, 2, 2),
(8, 1, 3),
(9, 1, 3);
Следующий мой запрос: -
Этот запрос ищет «первый класс» (тег для first = 3 и для class = 4 в таблице тегов) и возвращает все эти классы так, чтобы в имени класса присутствовали как термины first, так и class.
SELECT wtagrels.id_wc,SUM(DISTINCT( wtagrels.id_tag =3)) AS
key_1_total_matches,
SUM(DISTINCT( wtagrels.id_tag =4)) AS
key_2_total_matches
FROM all_tag_relations AS wtagrels
WHERE ( wtagrels.id_tag =3
OR wtagrels.id_tag =4 )
GROUP BY wtagrels.id_wc
HAVING key_1_total_matches = 1
AND key_2_total_matches = 1
LIMIT 0, 20
И возвращает класс с id_wc = 1.
Но я хочу, чтобы поиск показывал все эти классы так, чтобы все поисковые термины присутствовали в имени класса или имени его преподавателя
Таким образом, поиск «Sandeepan class» (wtagrels.id_tag = 1,4) или «Sandeepan Nath» также возвращает класс с id_wc = 1. И поиск. Поиск "Bob First" не должен возвращать никаких классов.
Пожалуйста, измените вышеуказанный запрос или предложите новый запрос, если возможно, используя MyIsam - полнотекстовый поиск, но каким-то образом помогите мне получить результат.