У меня есть таблица, в которой хранится набор вопросов. Каждый вопрос связан минимум с 1 и максимум 3 предметами.
QUESTION_TABLE
---------------
id => INT (primary key)
question => VARCHAR
subject1 => VARCHAR
subject2 => VARCHAR
subject3 => VARCHAR
created_at => DATETIME
Тема сохраняется как комбинация темы, раздела и главы с разделением запятой ,
. Вот несколько примеров моих данных.
| id | question | subject1 | subject2 | subject3 | created_at |
--------------------------------------------------------------------------
| 1 | some text.. | 1, | 17, | 9,33,5 | 2019-01-12 11:45:26
| 2 | some text.. | 17,22,98 | 1, | 12,10 | 2019-02-22 15:23:10
| 3 | some text.. | 9,33 | | | 2019-03-13 12:04:43
| 4 | some text.. | 17, | 5, | 1, | 2019-04-05 05:30:12
Мне нужно получить вопрос по темам, связанным с [1,17,5]
, где это динамические данные. Для этого я использую запрос ниже.
SELECT * FROM questions
WHERE subject1 LIKE '1,%' OR subject2 LIKE '1,%' OR subject3 LIKE '1,%'
OR subject1 LIKE '17,%' OR subject2 LIKE '17,%' OR subject3 LIKE '17,%'
OR subject1 LIKE '5,%' OR subject2 LIKE '5,%' OR subject3 LIKE '5,%'
Будет 3 поисковика поиска.
* предмет, раздел и глава LIKE '17,22,98
* субъект и секция LIKE '17,22,%'
* только субъект LIKE '17,%'
Есть ли другой способ уменьшить эту сложность в запросе? Могу ли я использовать метод IN
в операторе LIKE
?
Примечание : Я не могу изменить структуру. Проект уже реализован другим пользователем, и у меня не так много времени, чтобы изменить структуру. Поэтому, пожалуйста, поймите ситуацию.