|
|
|
| Есть такой запрос:
WHERE title LIKE '% $search %' OR title LIKE '$search %' OR title LIKE '% $search' OR title LIKE '$search'
|
Как сделать чтобы учитывался не только пробел в конце искомого слова(LIKE '$search %') но ещё запятая, точка и такой символ "/"
WHERE title REGEXP '^[ ,./\]$search\[ ,./\]?$'
| - подправьте плиз если что не так запросе | |
|
|
|
|
|
|
|
для: designshadow
(11.08.2013 в 23:47)
| | Уберите ^ и $ - они требуют, чтобы поиск велся с первого символа title и заканчивался последним, т.е. содержало либо $search, либо $search с пробелами и символами препинания вначале или конце, т.е. по факту найти строки с несколькими значениями разделенными запятыми - не реально.
WHERE title REGEXP '[ ,./]?$search[ ,./\]?'
|
PS Лучше всех конечно и с точки зрения удобства составления запросов и скорости обработки данных под содержимое title выделить отдельную таблицу, связав её с целевой внешним ключом. | |
|
|
|
|
|
|
|
для: cheops
(12.08.2013 в 07:25)
| | То что добился сделать это чтобы учитывало запятую в конце таким способом:
title LIKE '% $search %' OR title LIKE '$search %' OR title LIKE '% $search' OR title LIKE '$search' OR LOWER(title) RLIKE '$search,'
|
| |
|
|
|
|
|
|
|
для: designshadow
(11.08.2013 в 23:47)
| |
title
--------
hell
hello
,hell
hell.
/hell/
|
WHERE title REGEXP '[,\./]?hell[,\./]?'
| Все кроме hello будет соответствовать. | |
|
|
|
|
|
|
|
для: Sfinks
(12.08.2013 в 17:39)
| |
WHERE title REGEXP '[,\./]?hell[,\./]?'
|
Попробовал соль, нашло фасоль :) | |
|
|
|
|
|
|
|
для: designshadow
(12.08.2013 в 19:51)
| | Так вы нигде и не говорили о том что $search - это отдельное слово.
Хотя вынужден согласиться - РВ не точное.
Правильно будет так:
WHERE title REGEXP '[ ,\./]?[[:<:]]hell[[:>:]][ ,\./]?'
|
| |
|
|
|
|
|
|
|
для: Sfinks
(12.08.2013 в 20:25)
| | Спасибо, так работает.
Ещё обратил внимание что учитываются слова в кавычках типа "hell"(не прописывая нигде про кавычки).
Но бывают ещё слова в таких кавычках «hell» - прописал в РВ, но не находит:
WHERE title REGEXP '[ «»,\./]?[[:<:]]hell[[:>:]][ «»,\./]?'
|
| |
|
|
|
|
|
|
|
для: designshadow
(13.08.2013 в 15:02)
| | В MySQL весьма урезанные РВ.... Поэтому такие пляски с бубном. Могу сказать, что тоже будет найден, Хотя вопроса вроде тоже нигде не указано.
Давайте я переведу это РВ на русский:
[ ,\./]? - пробел, запятая, точка или слеш в количестве 0 или 1 штука
[[:<:]] - левая граница слова
hell - слово
[[:>:]] - правая граница слова
[ ,\./]? - пробел, запятая, точка или слеш в количестве 0 или 1 штука
|
Вот и получается, что подходит, потому что ноль точек есть, граница слова есть слово есть.
А с «» не прокатывает, видимо потому что MySQL считает что между « и hell границы слова нет. Почему, это уж к разработчикам =)
Получается, что если вам нужно однозначно определить все границы слова, то нужно выкинуть [[:<:]], [[:>:]] и вопросы, а в [ ] перечислить все что по вашему мнению будет считаться удовлетворительной границей слова. Не забывая экранировать спец-символы.
Например так:
WHERE title REGEXP '(^|[ «`\?\!,\'\./"])hell([ »`\?\!,\'\./"]|$)'
|
| |
|
|
|