Здесь $ar - массив, содержащий все строки одного поля таблицы БД.
Проблема следуйщая: Этих строк около 3000, а значит в приведенных выше циклах должно произойти больше 1 000 000 итераций. Сервер просто не улаживается в отведенные 30 секунд для этого
скрипта.
Подскажите плз, как можно решить эту проблему?!
ЗЫ: За 30 секунд $n успевает дойти всего лишь до 100
Возможно есть другие способы перебора значений таблицы, с удовольствием выслушаю.
Спустя 7 минут, 45 секунд (2.07.2009 - 09:17) sergeiss написал(а):
Тебе надо сделать следующее:
1. Использовать тэги форматирования текста. Сейчас пока я это сделал.
2. Надо оптимизировать цикл

Покажи целиком текст, относящийся к проблеме. Подумаем вместе.
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 написал(а):
в дальнейшем применяют триггеры для устранения дубликатов