Как сделать поиск по началу слов в строке базы (MySQL)

IF

else
Как сделать поиск по началу слов в строке базы (MySQL)

Сделать поиск по началу строки тривиально.
Сделать просто поиск в строке тоже не представляет трудностей.
А вот как сделать поиск, чтобы он затрагивал только начало слов в строке базы - не могу понять.
Хоть в каую сторону копать?

(если тему перенесут в другой форум, посолиднее, буду только рад).
 

Фанат

oncle terrible
Команда форума
было бы лучше, если бы ты озвучил реальную задачу, которая перед тобой стоит.
 

IF

else
Реальная задача - есть бренды и названия серий некоторой продукции. Эти бренды и серии часто состоят из нескольких слов. Бывают, что люди помнят какое-то слово (необязательно первое), по которому и ищут. Ищут они, бывает, не набирая всё слово, а только его начало.
Т.е. нужен поиск по началу всех слов в строке.
По первому слову в строке можно искать просто по шаблону, а вот по следующим - надо прибавлять пробел в начало шаблона поиска (т.о. определяя начало нового слова).
А как всё это соединить - не совсем понятно.
 

Фанат

oncle terrible
Команда форума
а что будет ужасного, если этот кусок найдётся не в начале, а в конце слова?
а с чего ты взял, что ищут по началу слова, а не по середине?
почему бы не искать просто подстроку в названии бренда?
 

Steamroller

Новичок
По первому слову в строке можно искать просто по шаблону, а вот по следующим - надо прибавлять пробел в начало шаблона поиска (т.о. определяя начало нового слова).
А как всё это соединить - не совсем понятно.
Дык в лоб
WHERE field LIKE 'prefix%' OR field LIKE '% prefix%'
 

Фанат

oncle terrible
Команда форума
имхо надо ему LIKE '%search_word%' и не парить себе и другим голову.
 

si

Administrator
Фанат & Steamroller
fulltextsearch решает эту задачу куда лучше
 

Steamroller

Новичок
si, ты хочешь сказать что в MySQL fulltext способен искать по фрагментам слов?
 

camka

не самка
Steamroller
Именно. Однако, есть ограничение: по умолчанию минимальная длинна слов, учитываемых при поиске по полнотекстовому индексу, равноа четырем символам.
То есть, если в базе есть "Max Factor", то при поиске отдельно "Мах" ничего не отыщется.
 

Steamroller

Новичок
Подскажите, пожалуйста, что я не так делаю:

mysql> show global variables like '%ft_min%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| ft_min_word_len | 4 |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> select * from tmp3;
+----+-------------------------+
| id | tmp_text |
+----+-------------------------+
| 1 | qwertyyirpyi |
| 2 | qwertylkfjg |
| 4 | qwertyui asldkjfalskdjf |
+----+-------------------------+
3 rows in set (0.00 sec)

mysql> select * from tmp3 where match (tmp_text) against ('qwertyui');
+----+-------------------------+
| id | tmp_text |
+----+-------------------------+
| 4 | qwertyui asldkjfalskdjf |
+----+-------------------------+
1 row in set (0.00 sec)

mysql> select * from tmp3 where match (tmp_text) against ('qwerty');
Empty set (0.00 sec)

mysql> select * from tmp3 where match (tmp_text) against ('qwerty*');
Empty set (0.00 sec)

-~{}~ 31.10.05 11:56:

А, разобрался. :)
Круто. :)
 
Сверху