Обходной путь полнотекстового поиска SQL для целочисленных значений

0

Я пытаюсь выполнить полный текстовый поиск с несколькими столбцами. Это не моя проблема. У меня разные значения для разных столбцов. Пока нет проблем.

Сначала я показываю тебе свой стол. Это проще объяснить

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. Но проблема в том, что полнотекстовый поиск не может отличаться от текста числовые значения. Слово месяца все равно одно и то же. Оценка продолжительности одинакова.

Есть ли решение, которое лучше, чем использование трех месяцев, четырех месяцев и т.д.?

Извините за мой плохой английский. Это всего лишь простой пример, который показывает проблему полнотекстового поиска. Также возможно, что числовые значения могут использоваться в других ситуациях.

  • 0
    Добавьте ожидаемый результат
  • 1
    показать ваш ожидаемый результат
Показать ещё 1 комментарий
Теги:
full-text-search

1 ответ

0

Это слишком долго для комментария. Исправьте вашу модель данных!

Сохранение нескольких значений в одном столбце не является правильным способом использования реляционных баз данных. Вместо этого создайте таблицу с одной строкой для каждого идентификатора курса и "темы" (что кажется более подходящим, чем имя:

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';

Этот запрос может использовать индексы, и вам не нужен полнотекстовый поиск.

  • 0
    Я знаю, что ты прав. Это всего лишь простой пример. Это не моя проблема. Моя проблема в том, что я хочу иметь разные оценки, например, в разные месяцы. Если я ищу в течение 4 месяцев, результаты за 4 месяца должны получить оценку, результат за 3 месяца или 5 месяцев не должен получить оценку. Проблема с полнотекстовым поиском состоит в том, что он не может дать оценку числовым значениям. Таким образом, 3 месяца, 4 месяца и 5 месяцев получают одинаковый счет из-за слова месяцы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню