Игнорировать скобки в запросе MYSQL Like - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть пример таблицы MYSQL со следующими строками:

name
------
Oppo A71 (2018)
Plum Flipper (2018)
Lenovo K5 Note (2018)
Huawei Y9 (2018)
Huawei Y7 (2018)

Я хочу разрешить пользователю выполнять поиск в базе данных.Проблема в том, что в большинстве случаев пользователь будет искать ключевое слово 2018 без скобок, например, samsung a8 2018 вместо samsung a8 (2018).

Так для следующего запроса:

SELECT * FROM phones WHERE name LIKE '% 2018 %'

Он ничего не вернет, потому что 2018 хранится в БД с квадратными скобками.

Если я переключу запрос на:

SELECT * FROM phones WHERE name LIKE '%2018%'

Он будет правильно отображать результатыно я не хочу, чтобы запрос соответствовал тексту, если он является частью строки или возвращает тысячи несущественных строк.Слова должны быть фактически словами, найденными, а не частью слов.Поэтому у меня должны быть пробелы в течение года.

Есть ли способ при запуске LIKE игнорировать скобки, чтобы, например, 2018 соответствовал строкам с (2018) в качестве слова?

Ответы [ 4 ]

0 голосов
/ 28 сентября 2018

Вы можете использовать регулярное выражение, чтобы просто искать 2018 как само слово.Просто используйте слово граничные элементы вокруг него:

SELECT *
FROM phones
WHERE name REGEXP '[[:<:]]2018[[:>:]]'
0 голосов
/ 28 сентября 2018

Вы можете проверить два условия в сочетании с OR, чтобы проверить обе ситуации.Попробуйте:

SELECT * FROM phones 
WHERE name LIKE '% 2018 %' OR
      name LIKE '%(2018)%'
0 голосов
/ 28 сентября 2018

Хотя ответ, предоставленный Гордоном Линоффом, безусловно, сработает, он не будет работать хорошо, когда ваши наборы данных будут расти, но лучший способ - использовать полнотекстовый поиск в вашей таблице, который намного легче решает подобные проблемы.

0 голосов
/ 28 сентября 2018

Один из методов - регулярные выражения.Но с like вы можете заменить символы перед соответствием:

SELECT *
FROM phones
WHERE REPLACE(REPLACE(name, '(', ' '), ')', ' ') LIKE '% 2018 %'
...