![]() |
|
Модераторы: skyboy |
![]()
|
|
| sagov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
Товарищи программисты вот вам задачка.
есть таблица CONTENT записей около 500 тыс.Весит около 400М. Поле CONTENT_TEXT - текстовое(ТЕXT). MySQL - 4.1. Необходимо вытащить 250 символов из поля CONTENT_TEXT где содержится ,к примеру слово "ВАСЯ", начиная с первого пробела до слова "ВАСЯ" используя только MySQL. Вообще в MySQL - 4 это решимо? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
так "250 символов" или "до слова Вася"?
а вообще в полях запроса можно как бы использовать фукнкции... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| sagov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
От первого пробела находящегося до слова "ВАСЯ", отсчитывать 250 символов.Соответственно "ВАСЯ" тоже туда может попасть.
А на счет функций. Может и можно только не знаю как. Наверное нужен пример. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Слово "Вася" найдет instr. заодно определит позицию.
Кусок от начала до слова "Вася" (длину уже знаем) отрежет substring Позицию последнего пробела в отрезанном куске найдет substring_index(,,Negative), Length и тривиальное вычитание. Она равна позиции этого пробела во всей строке. Подстроку от позиции пробела длиной в 250 символов отрежет опять-таки substring. А теперь собери все это воедино. И не забудь в запросе добавить Where - чтобы функции не окривели на строках где нет Васи. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| sagov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
Огромное человеческое спасибо.Получилось Супер.
|
|||
|
||||
| sagov |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
Пардон.Что не одно так другое.
Когда одна строка то без проблем а больше выдает ошибку
Как быть |
||||
|
|||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
sagov Дык это уже другая проблема...
Это ты несколько записей получил - теперь в php обрабатывай их... Ну или по крайней мере полный запрос приведи... -------------------- ![]() |
|||
|
||||
| sagov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
Нееееееее.
В том то и дело,что я записи не получаю. Допустим когда слово "ВАСЯ" в таблице встречается 1 раз и работа идет с одной строкой он работает,но как только встречается в нескольких строках, в массиве, все пишет что результат больше чем одна строка.Видимо этот запрос работает только с одной строкой. На PHP не грешите, я запрос задаю в MySQLQueryBrowser Пожалуйста посмотрите запрос ,что я делаю неправильно.В переменую я просто вывел чтобы было нагляднее понятно.
|
|||
|
||||
| Kesh |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
Ага... Смотри в чем дело...
У тебя запрос
Возвращает несколько строк... т.е. потом получается во втором запросе вместо строкового параметра в функцию передается несколько строк... Если у тебя идет обработка в php - я бы посоветовал в данном случае сделать так... Сделать выборку по
А потом уже mysql_fetch_array() в цикле и резать ее средствами php или другого языка (с которым работаешь)... -------------------- ![]() |
||||
|
|||||
| sagov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
Да я так делаю сейчас.Просто база зверски большая и будет расти с каждым днем.
Я подсчитал что на работу запроса выходит около 4-7 сек, И потом на резку несколько секунд. В общей сложности на вывод результата выходит около 7-9 сек - это не дело.Вот я и хотел попробовать может резать уже в самой базе.Может быстрее будет. Вот кстати ссылка на то что делаю.Это поисковик. http://voydod.dyndns.org:8080/ Добавлено @ 09:32 И ещё я не использую like "%Someword%" На это можно не грешить, я использую
Да ещё один вопрос есть ли какой нибудь ресурс или там модуль так называемый оптимизатор запросов в MySQL. Это сообщение отредактировал(а) sagov - 24.11.2005, 14:40 |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 1 Всего: 51 |
голова на плечах |
|||
|
||||
| sagov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 22.11.2005 Репутация: нет Всего: нет |
Точно, как я сразу не догадался.А я думал что в неё тоько еду можно закладывать.Спасибо всем кто принял участие в обсуждение . Я нашёл другой выход.Вроде щас летает всё. Это сообщение отредактировал(а) sagov - 24.11.2005, 08:53 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |