У меня есть три разных запроса MYSQL, которые я пытаюсь использовать для поиска по одному столбцу (список классов); цель состоит в том, чтобы столбец содержал _10_
, но не должен содержать _3_
или _15_
(примерным значением может быть что-то вроде _4_8_10_15_
, которое не будет выполнено с учетом _15_
).
Я пробовал три разных подхода, и все три не дают ошибок, но все же разные результаты:
1) Поиск FULLTEXT (с включенным индексом FULLTEXT в списке классов) не дал ошибок, но также не дал результатов.
SELECT classlist, classcount FROM subgroupstest WHERE MATCH (classlist) AGAINST ('+10 -3 -15' IN BOOLEAN MODE)
2) Простые предложения LIKE вернули 516 строк.
SELECT classlist, classcount FROM subgroupstest WHERE classlist LIKE "%_10_%" AND classlist NOT LIKE "%_3_%" AND classlist NOT LIKE "%_15_%"
3) Гибрид LIKE / REGEXP дал 1912 результатов. В одном примере возвращалось, что второй подход не был _4_10_18_23_
- это точный результат, и в этом результате нет дубликатов, поэтому я должен предположить, что во втором подходе (не менее первом!) Что-то не так.
SELECT classlist, classcount FROM subgroupstest WHERE classlist LIKE '%_10_%' AND classlist NOT REGEXP '_3_|_15_'
В этот момент я остаюсь, качая головой и не зная, что происходит. Есть всегда более глубокие проблемы, которые я мог бы попытаться найти, но может ли кто-нибудь проверить, правильно ли я выполняю подходы REGEXP и / или FULLTEXT? Похоже, что я видел в Google после последних нескольких часов чтения и подражания, но я впервые использую любой из них.