Nicki
Новичок
Привет всем.
Помогите разобраться с запросом поиска аромата (совпадение по СЛОВАМ, а не части слова). Проблема в том, что LIKE '% STRING %' соответствует только словам в середине фразы (потому что слово с обеих сторон обрамлено пробелами). Если использовать такую конструкцию на поле, в котором записана фраза 'Acqua Di Gio' и искать LIKE '% gio %' или LIKE '% acqua %', то ничего не получится, потому что слева от Acqua и справа от Gio пробелов нет - там же начало и конец поля. А формат LIKE '%STRING%' (без пробелов по бокам искомого слова) вообще ищет подстроку, т.е. даже частичные совпадения в отдельных словах.
Как быть?
Хотел использовать CONCAT(' ','name',' ') чтобы по бокам поля добавлять при выборке пробелы и искать уже в HAVING, т.к. в where нельзя использовать псевдонимы. Но в итоге LIKE в having вообще ничего не возвращает даже при самых мягких условиях. Помогите, как быть мне?
Вот пример запроса
Без having (просто его строку убираю из запроса ничего не меняя больше) возвращает:
- Acqua di Gioia
- Acqua Di Gio men
- Acqua Di Gio
- Gioria (лишняя запись, не нужная)
- и т.д. много не нужных в которых есть частичное вхождение.
С having вообще ничего, хотя должны бы остаться все указанные, т.к. стоит LIKE "%gio%".
Что можно тут придумать, чтобы искать по словам, а не их частям?
Помогите разобраться с запросом поиска аромата (совпадение по СЛОВАМ, а не части слова). Проблема в том, что LIKE '% STRING %' соответствует только словам в середине фразы (потому что слово с обеих сторон обрамлено пробелами). Если использовать такую конструкцию на поле, в котором записана фраза 'Acqua Di Gio' и искать LIKE '% gio %' или LIKE '% acqua %', то ничего не получится, потому что слева от Acqua и справа от Gio пробелов нет - там же начало и конец поля. А формат LIKE '%STRING%' (без пробелов по бокам искомого слова) вообще ищет подстроку, т.е. даже частичные совпадения в отдельных словах.
Как быть?
Хотел использовать CONCAT(' ','name',' ') чтобы по бокам поля добавлять при выборке пробелы и искать уже в HAVING, т.к. в where нельзя использовать псевдонимы. Но в итоге LIKE в having вообще ничего не возвращает даже при самых мягких условиях. Помогите, как быть мне?
Вот пример запроса
Код:
SELECT name,
IF(name = 'di gio', 3*10, 0)
+ IF(name like '%di gio%', 3*10, 0)
+ IF(name LIKE "%di%", 9, 0) +
+ IF(name LIKE "%gio%", 9, 0) AS relevance,
CONCAT(' ','name',' ') AS nameForSearch
FROM goods
WHERE type='perfumery' AND (
name="di gio" OR
name LIKE "%di%" OR
name LIKE "%gio%"
)
HAVING (nameForSearch LIKE "%gio%")
ORDER BY relevance DESC
LIMIT 0,50
- Acqua di Gioia
- Acqua Di Gio men
- Acqua Di Gio
- Gioria (лишняя запись, не нужная)
- и т.д. много не нужных в которых есть частичное вхождение.
С having вообще ничего, хотя должны бы остаться все указанные, т.к. стоит LIKE "%gio%".
Что можно тут придумать, чтобы искать по словам, а не их частям?