Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Необходимо только 250 символов, Есть над чем подумать! 
:(
    Опции темы
sagov
Дата 22.11.2005, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Товарищи программисты вот вам задачка.
есть таблица CONTENT записей около 500 тыс.Весит около 400М.
Поле CONTENT_TEXT - текстовое(ТЕXT).
MySQL - 4.1.
Необходимо вытащить 250 символов из поля CONTENT_TEXT где содержится ,к примеру слово "ВАСЯ",
начиная с первого пробела до слова "ВАСЯ" используя только MySQL.
Вообще в MySQL - 4 это решимо? smile
PM MAIL   Вверх
Akina
Дата 22.11.2005, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



так "250 символов" или "до слова Вася"?
а вообще в полях запроса можно как бы использовать фукнкции...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
sagov
Дата 22.11.2005, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



От первого пробела находящегося до слова "ВАСЯ", отсчитывать 250 символов.Соответственно "ВАСЯ" тоже туда может попасть.
А на счет функций. Может и можно только не знаю как. Наверное нужен пример.
PM MAIL   Вверх
Bose
Дата 22.11.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 1
Всего: 51



не совсем понял от чего начинать... но вот как пример вариант который вытаскивает первые 250 символов, или первые символы до слова Vasja, если слово Vasja встретилось раньше чем 250 символов...

select Left(CONTENT_text, if(LOCATE('Vasja',CONTENT_text)<250,LOCATE('Vasja',CONTENT_text),250))
FROM CONTENT
PM MAIL WWW Skype   Вверх
Akina
Дата 22.11.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Слово "Вася" найдет instr. заодно определит позицию.
Кусок от начала до слова "Вася" (длину уже знаем) отрежет substring
Позицию последнего пробела в отрезанном куске найдет substring_index(,,Negative), Length и тривиальное вычитание. Она равна позиции этого пробела во всей строке.
Подстроку от позиции пробела длиной в 250 символов отрежет опять-таки substring.

А теперь собери все это воедино. И не забудь в запросе добавить Where - чтобы функции не окривели на строках где нет Васи.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
sagov
Дата 22.11.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Огромное человеческое спасибо.Получилось Супер.

Цитата
Знания  подобны кругу.Чем больше знаний ,тем больше периметр неизведанного.

PM MAIL   Вверх
sagov
Дата 22.11.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Пардон.Что не одно так другое.
Код

$text="SELECT content_text FROM content where content_text like '%ВАСЯ%'";

select substring(($text),(instr((substring(($text),1,instr(($text ),"ВАСЯ")))," ")),250)


Когда одна строка то без проблем а больше выдает ошибку
Код

Subquery returns more than 1 row

Как быть smile
PM MAIL   Вверх
Kesh
Дата 22.11.2005, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



sagov Дык это уже другая проблема...
Это ты несколько записей получил - теперь в php обрабатывай их...

Ну или по крайней мере полный запрос приведи...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
sagov
Дата 23.11.2005, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Нееееееее.
В том то и дело,что я записи не получаю.
Допустим когда слово "ВАСЯ" в таблице встречается 1 раз и работа идет с одной строкой он работает,но как только встречается в нескольких строках, в массиве, все пишет что результат больше чем одна строка.Видимо этот запрос работает только с одной строкой.
На PHP не грешите, я запрос задаю в MySQLQueryBrowser
Пожалуйста посмотрите запрос ,что я делаю неправильно.В переменую я просто вывел чтобы было нагляднее понятно.
Код

$text="SELECT content_text FROM content where content_text like '%ВАСЯ%'";

select substring(($text),(instr((substring(($text),1,instr(($text ),"ВАСЯ")))," ")),250) as CN from
content group by CN



PM MAIL   Вверх
Kesh
Дата 23.11.2005, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Ага... Смотри в чем дело...
У тебя запрос
Код

$text="SELECT content_text FROM content where content_text like '%ВАСЯ%'";

Возвращает несколько строк... т.е. потом получается во втором запросе вместо строкового параметра в функцию передается несколько строк...

Если у тебя идет обработка в php - я бы посоветовал в данном случае сделать так...
Сделать выборку по
Код

SELECT content_text FROM content where content_text like '%ВАСЯ%'

А потом уже mysql_fetch_array() в цикле и резать ее средствами php или другого языка (с которым работаешь)...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
sagov
Дата 23.11.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Да я так делаю сейчас.Просто база зверски большая и будет расти с каждым днем.
Я подсчитал что на работу запроса выходит около 4-7 сек, И потом на резку несколько секунд.
В общей сложности на вывод результата выходит около 7-9 сек - это не дело.Вот я и хотел попробовать может резать уже в самой базе.Может быстрее будет.
Вот кстати ссылка на то что делаю.Это поисковик.
http://voydod.dyndns.org:8080/
Добавлено @ 09:32
И ещё я не использую like "%Someword%"
На это можно не грешить, я использую
Код

match (page_text) AGAINST ('".($search)."')

Да ещё один вопрос есть ли какой нибудь ресурс или там модуль так называемый оптимизатор запросов в MySQL.

Это сообщение отредактировал(а) sagov - 24.11.2005, 14:40
PM MAIL   Вверх
Bose
Дата 23.11.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 1
Всего: 51



Цитата(sagov @ 23.11.2005, 09:23)
Да ещё один вопрос есть ли какой нибудь ресурс или там модуль так называемый оптимизатор запросов в MySQL.


голова на плечах smile smile
PM MAIL WWW Skype   Вверх
sagov
Дата 23.11.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Цитата
голова на плечах


Точно, как я сразу не догадался.А я думал что в неё тоько еду можно закладывать.Спасибо всем кто принял участие в обсуждение . Я нашёл другой выход.Вроде щас летает всё.
smile

Это сообщение отредактировал(а) sagov - 24.11.2005, 08:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.