[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: FATAL ERROR: Maximum execution time
San4ezy
Товарищи программисты!
Я столкнулся с такой проблемой:

PHP
for($n=0;$n<count($ar);$n++){
  for(
$m=$n+1;$m<count($ar)-$n;$m++){
    echo ++
$i." ".$n." ".$m."<br>";
  }
}


Здесь $ar - массив, содержащий все строки одного поля таблицы БД.
Проблема следуйщая: Этих строк около 3000, а значит в приведенных выше циклах должно произойти больше 1 000 000 итераций. Сервер просто не улаживается в отведенные 30 секунд для этого скрипта.

Подскажите плз, как можно решить эту проблему?!

ЗЫ: За 30 секунд $n успевает дойти всего лишь до 100 sad.gif

Возможно есть другие способы перебора значений таблицы, с удовольствием выслушаю.



Спустя 7 минут, 45 секунд (2.07.2009 - 09:17) sergeiss написал(а):
Тебе надо сделать следующее:
1. Использовать тэги форматирования текста. Сейчас пока я это сделал.
2. Надо оптимизировать цикл smile.gif Покажи целиком текст, относящийся к проблеме. Подумаем вместе.
3. Если за 30 секунд все-таки не успевает скрипт, то можно увеличить это время через функцию set_time_limit.

Спустя 5 часов, 9 минут, 2 секунды (2.07.2009 - 14:26) San4ezy написал(а):
Скрипт должен найти похожие записи в бд

PHP
//уже законнектился
$count=mysql_result(mysql_query("SELECT COUNT(*) FROM scms_products"),0);
$result=mysql_query("SELECT * FROM scms_products");
$ar=array();

//нужные значения (name) кладем в массив $ar;
while($row=mysql_fetch_array($result)){
  
array_push($ar,$row["name"]);
}

//в циклах сравниваем каждый элемент массива со всеми остальными
for($n=0;$n<count($ar);$n++){
  for(
$m=$n+1;$m<count($ar)-$n;$m++){
    
//Здесь будет происходить сравнение двух записей (similar_text)
  
}
}

//после будет выводиться таблица совпадений

Спустя 1 час, 13 минут, 22 секунды (2.07.2009 - 15:40) jetistyum написал(а):
А строки сравниваем на строгое соответствие?
строки сравниваются на "похожесть" или "идентичность" ???
например такой вот запрос может определить сколько вхождений строк имеет каждая строка

SQL
SELECT `id`, `name`, count(`name`) FROM `test1` GROUP by `name`


где name - проверяемая строка...
результат будет примерно такой

id name count
1 kostya 5
2 illarion 1
3 nikita 3

таким образом можно узнать сколько совпадений имеется в таблице без страшных циклов. Хотя мускуль делает проверку примерно так же, но на более высоком уровне, поэтому все это происходит быстрее.
А вообще изъясни для чего тебе воообще нужна такая проверка. какова логика скрипта. для чего ты это ищешь??? может есть более оптимальный способ??

Спустя 6 минут, 49 секунд (2.07.2009 - 15:47) San4ezy написал(а):
Цитата
А строки сравниваем на строгое соответствие?

не обязательно.
нужно выявить строки, которые совпадают полностью или частично (к примеру одно - два слова)

Спустя 9 минут, 18 секунд (2.07.2009 - 15:56) jetistyum написал(а):
хм... выявить все строки в базе данных которые могут быть похожи на другие строки в этой же базе данных ... оооо черт... а ты уверен что это нужно делать?
какая идея скрипта? логика?

Спустя 1 минута, 49 секунд (2.07.2009 - 15:58) San4ezy написал(а):
Цитата
какая идея скрипта? логика?

Есть база фильмов, но там есть дубликаты. Вот их-то и нужно найти, а в последствии удалить

Спустя 4 минуты, 41 секунда (2.07.2009 - 16:02) glock18 написал(а):
это можно сделать join'ом таблицы на себя

Спустя 6 минут, 14 секунд (2.07.2009 - 16:09) jetistyum написал(а):
JOIN - ом можно сделать, но наверное нужно использовать полнотекстовый поиск
подробнее читать тут
http://www.mysql.ru/docs/man/Fulltext_Search.html
но лопатить это циклами в PHP это точно изврат...

Спустя 12 минут, 5 секунд (2.07.2009 - 16:21) PandoraBox2007 написал(а):
в дальнейшем применяют триггеры для устранения дубликатов
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.