Я пытаюсь выполнить полный текстовый поиск с несколькими столбцами. Это не моя проблема. У меня разные значения для разных столбцов. Пока нет проблем.
Сначала я показываю тебе свой стол. Это проще объяснить
ID | course_name | course_level | duration | place
--------------------------------------------------------
1 |math, physics|6 |3 months |Spaichingen
2 |physics |6 |4 months |Spaichingen
3 |math |7 |3 months |Spaichingen
4 |physics |7 |5 months |Spaichingen
5 |math |6 |3 months |Trossingen
6 |physics |6 |4 months |Trossingen
7 |math |7 |3 months |Spaichingen
8 |math |7 |5 months |Spaichingen
Если я ищу курс Math 7, я мог бы использовать предложение where-where следующим образом:
... WHERE course_level = '7'
С Match-Again я могу искать и фильтровать математику. Место и если курс - это комбинация с другими предметами, не имеет значения. Если вы ищете математику 6 и физику 6, первый курс (id = 1) имеет самый высокий балл и так далее.
Как я рассчитываю, оценка не имеет значения. Единственная проблема, с которой я столкнулся, - это если я хочу искать Math 7, а продолжительность должна быть 5 месяцев, запись 8 должна иметь более высокий балл, чем запись 7. Но проблема в том, что полнотекстовый поиск не может отличаться от текста числовые значения. Слово месяца все равно одно и то же. Оценка продолжительности одинакова.
Есть ли решение, которое лучше, чем использование трех месяцев, четырех месяцев и т.д.?
Извините за мой плохой английский. Это всего лишь простой пример, который показывает проблему полнотекстового поиска. Также возможно, что числовые значения могут использоваться в других ситуациях.
Это слишком долго для комментария. Исправьте вашу модель данных!
Сохранение нескольких значений в одном столбце не является правильным способом использования реляционных баз данных. Вместо этого создайте таблицу с одной строкой для каждого идентификатора курса и "темы" (что кажется более подходящим, чем имя:
create table course_topics (
course_topic_id int auto_increment primary key,
course_id int not null,
topic varchar(255)
);
Затем вы можете объединить это с вашей неназванной таблицей, которую я буду называть courses
:
select . . .
from courses c join
course_topics ct
on ct.course_id = c.id
where c.course_level = 7 and
ct.topic = 'Math';
Этот запрос может использовать индексы, и вам не нужен полнотекстовый поиск.