Forum Webscript.Ru

Программирование => Perl => Тема начата: Forza от 23 Июля 2004, 21:40:37

Название: проблемы с запросами к MySQL
Отправлено: Forza от 23 Июля 2004, 21:40:37
Есть таблица DVD-дисков, в которой хранятся русское и английские названия, описание фильма (обычно список актёров) и ряд параметров типа цены, признака новинки и т.д (2253 строки общим размером 172408 кб, если верить show table status). К базе приделан скрипт на Перле, который прекрасно работает за одним исключением. Нужно было сделать поиск. Чтобы диск был выбран, каждое ключевое слово должно присутствовать либо в русском названии, либо в английском, либо в описании.

  Таким образом для поиска буквы «икс» будет следующий SQL-запрос select * from dvd where (rus_name like \'%x%\' OR eng_name like \'%x%\' OR descript like \'%x%\' ) LIMIT 100 OFFSET 0.

  Как видно, в любом случае скрипт выводит не более 100 совпадений. При небольшом количестве совпадений всё работает нормально. Если совпадений от 200 и выше, то скрипт напрочь зависает (страница с поиском даже не показывается, а остаётся предыдущая). Самое интересное, что если отменить открытие страницы с помощью Escape и кликнуть по какой-либо другой рабочей ссылке скрипта, скрипт всё равно в этом окне IE больше работать не будет.

  Повторю, скрипт по-любому выводит не более 100 совпадений, и если их всего 150, то он нормально даёт переключаться между страницей с 100 совпадениями (OFFSET 0 в запросе) и остальными 50 (OFFSET 100).

  Конечно, скрипт выводит данные о дисках в форматированном виде со всякими мелкими рисунками-заполнителями и прочем. Если сделать примитивный неформатированный вывод, то ничего не виснет. Но я не думаю, что дело в том, что какая-то запись БД конфликтует с функцией вывода, так как та же функция используется для вывода алфавитного каталога (просто меняем условие в WHERE), и там всё работает без проблем.

  Подозреваю, что это описание весьма туманно для вас, но хотя бы подскажите, куда надо «копать»: какой-нибудь вариант, из-за которого могут быть эти грабли.
  Если нужны дополнительные сведения, скажите – я напишу. А то с я этим уже за##ался. :insane:
Название: проблемы с запросами к MySQL
Отправлено: Меняздесьдавнонет от 23 Июля 2004, 22:36:49
для начала надо запросы проверять в консоли.
а пялиться в браузер, отлаживая sql-запрос, это то, же самое, что по телефону проводить нейрохирургическую операцию
Название: проблемы с запросами к MySQL
Отправлено: Forza от 23 Июля 2004, 22:57:23
Да, проверял я их в консоли - нормально всё!
Я же написал, что даже в браузере всё работает, если без форматирования выводить.
При этом работает и с форматированием, если строк менее ~200.

Блин, ну читайте внимательнее, пожалуйста!
Название: проблемы с запросами к MySQL
Отправлено: Меняздесьдавнонет от 23 Июля 2004, 23:36:00
а при чем здесь mysql тогда?
Название: проблемы с запросами к MySQL
Отправлено: Forza от 23 Июля 2004, 23:49:47
Цитировать
RomikChef:
а при чем здесь mysql тогда?


Ты, правда, внимательно прочитал первое письмо? Что в нём непонятного?

p.s. Да, я понимаю, что вопрос выглядит по-ламерски. Но я действительно не понимаю, почему всё это вышеописанное имеет место быть (что именно - см.выше), поэтому и написал сюда.
Название: проблемы с запросами к MySQL
Отправлено: glebushka от 23 Июля 2004, 23:54:45
Forza глянь в эррор лог.
Как выводит скрипт данные? по мере обработки? Или только в конце работы? Очень похоже на таймаут по выполнению скртипта. НО, если только скрипт в самом начале не выводит хттп заголовки, должна быть 500-ая ошбика.
Название: проблемы с запросами к MySQL
Отправлено: glebushka от 23 Июля 2004, 23:57:24
Forza, прекрати устраивать балаган, тем более что не прав. Если написаное тобой правда, то MySQL тут не причём
Название: проблемы с запросами к MySQL
Отправлено: Forza от 24 Июля 2004, 00:54:11
Цитировать
glebushka:
Forza глянь в эррор лог.

Эррор лог Апача? Уже смотрел. Там нет вообще ничего касательно этого случая.
Цитировать
glebushka:
Как выводит скрипт данные? по мере обработки? Или только в конце работы? Очень похоже на таймаут по выполнению скртипта. НО, если только скрипт в самом начале не выводит хттп заголовки, должна быть 500-ая ошбика.

Никакую ошибку Апач не выдаёт. ИЕ по сути "зависает" на странице ввода условий поиска: в его статусбаре начинает расти "прямоугольник", как будто открывается новая страница, но на пол-пути навечно останавливается.
А обычно скрипт выдаёт данные в конце обработки: по ходу которой все формы, таблицы и т.д. записываются в одну переменную $page.

А что за таймаут? Где он настраивается?
Цитировать
glebushka:
Forza, прекрати устраивать балаган, тем более что не прав. Если написаное тобой правда, то MySQL тут не причём

Блин, да я понимаю, что не в нём дело!!!! Поэтому и написал свой вопрос в форум Perl, а не Базы Данных.
Но ошибка-то получается именно при вполне определённом обращении к MySQL и последующей обработке результатов.
Название: проблемы с запросами к MySQL
Отправлено: glebushka от 24 Июля 2004, 15:26:56
Цитировать
Forza:
А что за таймаут? Где он настраивается?

Он настравивается хостером. Чтобы не перегружать сервер.

В самом начале скрипта выводи хттп заголовки, вставь printы в ключевые участки кода, и разберись в на каком этапе скрипт вырубается.