выбрать из поля кусочек текста

зверек

Новичок
выбрать из поля кусочек текста

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

В таблицах содержатся довольно объемные тексты, так что хочется cредствами mysql на этапе выборки получать кусочек текста со словом..Это возможно?

есть тут полно похожих тем, но ни в одной не нашла ответа на вопрос. Хелп!!!
 

зверек

Новичок
прочитала. Ничего не поняла про substring. Куда ее надо вставлять? в запросе из такой-то таблицы, такого то поля, в котором содержится то-то и то-то?

Можете написать пример скрипта с селектоми и выводом результатов? на примере таблицы "text" c полем "textik", в котором находится большой текст. И из него надо выбрать сово "словечко"..так чтобы оно выгрузилось юзеру в окружении скажем пятидесяти символов с одной и с другой стороны?
 

Verk

Guest
Пиши сама. Будут конкретные проблемы - спрашивай. Как иначе учиться-то ?
 

зверек

Новичок
конкретная проблема: как составить запрос, так чтобы из поля вывести кусок текста, а не весь текст, который в нем содержится?
Отправили читать про сабстринг.
там пример: SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar'
Только где тут место для базы, таблицы, LIKE и прочее, что мне нужно?
 

Verk

Guest
Это просто элементарный пример работы функции.

Твой селект будет вроде
SELECT SUBSTRING(textik FROM POSITION ('str' IN textik)) FROM text WHERE textik LIKE '%str%'

где 'str' - искомая подстрока
 

зверек

Новичок
не работает :( Ошибку выдает..
Кстати, а что такое IN в твоем запросе? Такого в описании функции нет.

а вот такой запрос:
SELECT SUBSTRING(textik,'str',200) FROM text WHERE textik LIKE '%str%' - выдает мне пустые строки. И в зависимости от str - разное их количество..пустых этих строк. Я думала она должна выводить в этом запросе кусочек текста длиной 200 символов с началом в слове str.
 

Verk

Guest
смотри, в моем запросе используется 2 строковые функции
POSITION(substr IN str)
и
SUBSTRING(str FROM pos)

сабстрингу вместо параметра 'pos' передается результат работы функции POSITION(substr IN str), которая находит позицию искомого в строке слова.

я, кстати, протестил свой запрос - работает
 

зверек

Новичок
Да, про Position я уже поняла.

У меня конкретно он и не работает.
Последний запрос с которым эксперементирую (конструкция с From не работатет..ни в каких вариантах):

SELECT SUBSTRING(textik, POSITION('str' IN textik), 100) FROM text WHERE textik LIKE '%str%'

Вот этот вариант выдает пустые строки.
Как только вместо POSITION('str' IN textik) ставлю любое число - все ок.
В чем дело-то? :(
 

Verk

Guest
SELECT POSITION('str' IN textik) FROM text WHERE textik LIKE '%str%'

а что он вот так возвращает ?
 

зверек

Новичок
Все у меня заработало. Спасибо большое. Только вот фигня: position оказывается регистрозависимый! :( Что делать? Мне регистрозависимый поиск не нужен.
 

Апельсин

Оранжевое создание
position оказывается регистрозависимый! Что делать? Мне регистрозависимый поиск не нужен.
он регистронезависимый если его аргумент не BINARY, если объявлен как BINARY - то регистрозависимый.
 

зверек

Новичок
"В MySQL 3.23 эта функция чувствительна к регистру, а в 4.0 она чувствительна к регистру только в случае, если хотя бы один из аргументов является строкой с двоичными данными."

у меня 3.23...Ну даже если я себе на локалку поставлю 4.0, то у прова то все равно 3.23...
 

Апельсин

Оранжевое создание
ну тогда сначала всю строку в один регистр переводишь используя LOWER() или UPPER(), а потом уже POSITION()
 

зверек

Новичок
Че то у меня ни LOWER() ни UPPER() не работают...
Что не так я делаю:

SRLECT LOWER(textik) from text

textik - поле в котором находится некий текст, который нужно перевести в нижний регистр.
text - таблица

Вот этот запрос ничего не меняет. Если кавычки ставлю LOWER('textik') то результат: TEXTIK.
 

зверек

Новичок
Это здесь я описалась. На самом деле все верно..Я все тестю в mysql-front. Там описка не прошла бы.
 

зверек

Новичок
LOWER вообще не пашет, а UPPER строчку "а партизаны все толще" превратил в "а парТизаны ВСе Толще"
Вот как это понимать-то? :(
 
Сверху