Forum Webscript.Ru
		Программирование => Perl => Тема начата: 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:
- 
				для начала надо запросы проверять в консоли.
 а пялиться в браузер, отлаживая sql-запрос, это то, же самое, что по телефону проводить нейрохирургическую операцию
- 
				Да, проверял я их в консоли - нормально всё!
 Я же написал, что даже в браузере всё работает, если без форматирования выводить.
 При этом работает и с форматированием, если строк менее ~200.
 
 Блин, ну читайте внимательнее, пожалуйста!
- 
				а при чем здесь mysql тогда?
			
- 
				RomikChef:
 а при чем здесь mysql тогда?
 
 
 Ты, правда, внимательно прочитал первое письмо? Что в нём непонятного?
 
 p.s. Да, я понимаю, что вопрос выглядит по-ламерски. Но я действительно не понимаю, почему всё это вышеописанное имеет место быть (что именно - см.выше), поэтому и написал сюда.
- 
				Forza глянь в эррор лог.
 Как выводит скрипт данные? по мере обработки? Или только в конце работы? Очень похоже на таймаут по выполнению скртипта. НО, если только скрипт в самом начале не выводит хттп заголовки, должна быть 500-ая ошбика.
- 
				Forza, прекрати устраивать балаган, тем более что не прав. Если написаное тобой правда, то MySQL тут не причём
			
- 
				glebushka:
 Forza глянь в эррор лог.
 
 Эррор лог Апача? Уже смотрел. Там нет вообще ничего касательно этого случая.
 glebushka:
 Как выводит скрипт данные? по мере обработки? Или только в конце работы? Очень похоже на таймаут по выполнению скртипта. НО, если только скрипт в самом начале не выводит хттп заголовки, должна быть 500-ая ошбика.
 
 Никакую ошибку Апач не выдаёт. ИЕ по сути "зависает" на странице ввода условий поиска: в его статусбаре начинает расти "прямоугольник", как будто открывается новая страница, но на пол-пути навечно останавливается.
 А обычно скрипт выдаёт данные в конце обработки: по ходу которой все формы, таблицы и т.д. записываются в одну переменную $page.
 
 А что за таймаут? Где он настраивается?
 glebushka:
 Forza, прекрати устраивать балаган, тем более что не прав. Если написаное тобой правда, то MySQL тут не причём
 
 Блин, да я понимаю, что не в нём дело!!!! Поэтому и написал свой вопрос в форум Perl, а не Базы Данных.
 Но ошибка-то получается именно при вполне определённом обращении к MySQL и последующей обработке результатов.
- 
				Forza:
 А что за таймаут? Где он настраивается?
 
 Он настравивается хостером. Чтобы не перегружать сервер.
 
 В самом начале скрипта выводи хттп заголовки, вставь printы в ключевые участки кода, и разберись в на каком этапе скрипт вырубается.