из текстового файла в БД

Статус
В этой теме нельзя размещать новые ответы.

KorP

Новичок
из текстового файла в БД

кажется ничего сложного, но что то я никак не допру в чём не прав...
PHP:
$count = count($file);
for($i = $count - 1; $i >= 0; $i--){
$e = explode(" - ", $file[$i]);
$query = "SELECT `album` FROM `list`";
$result = mysql_query($query);
while (list($album) = mysql_fetch_row($result)):
if ($album != $e[1]) {
$query = "INSERT INTO `list` (`artist`, `album`) VALUES ('".$e[0]."', '".$e[1]."')";
mysql_query($query) or die(mysql_error());
}
endwhile;
собственно ничего особенного скрипт не делает, есть текстовый файл формата:
артист - альбом
и это дело надо загонять в БД. беру файл, загоняю в массив, вставляю в БД - всё работает, но т.к. файл постоянно обновляется и БД тоже должна обновляться, добавляю проверку на имеющийся в БД альбом - если нет такого - записываем, если есть - пропускаем.
ну а собственно в такой инкорнации скрипт начинает кучу записей одного и того добавлять в БД по 100 раз...из 300 позиций в файле, в БД уже почти 200000 успел наплодить...подскажите пожалуйста в чём ошибся
 

KorP

Новичок
Автор оригинала: Апокалипсис
phpfaq.ru/debug
да скрипт не выдаёт никаких ошибок, он себе сам крутиться-выполняется, фигачит записи в БД и всё и не видно этому конца
 

Фанат

oncle terrible
Команда форума
блин, да, действительно.
присмотрелся к коду повнимательнее.

скажи, со времени регистрации на форуме в 2005 году, ты много занимался программированием?
 

akd

dive now, work later
Команда форума
читай еще раз.
http://phpfaq.ru/debug1
 

Фанат

oncle terrible
Команда форума
akd
да не. кривому алгоритму отладка не сильно поможет.
то есть, конечно, поможет выявить его косяки, но тут, по-моему, надо с головы начинать.

уже одно то, что он ищет альбом перебором всей таблицы...
 

KorP

Новичок
Автор оригинала: akd
читай еще раз.
http://phpfaq.ru/debug1
спасибо, прочитал и попробовал все описанные варианты и рекомендации - не помогло

-~{}~ 27.11.07 13:41:

Автор оригинала: *****
уже одно то, что он ищет альбом перебором всей таблицы...
ну так я же со всей таблицей сравниваю все значения из файла...
 

akd

dive now, work later
Команда форума
"ну так я же со всей таблицей сравниваю все значения из файла... "

нет ты ничего не сравниваешь, ты просто не понимаешь чем занимается твой код.
 

Фанат

oncle terrible
Команда форума
и, соответственно, если не находит, то - вставляет.
конкретно вставляет.

тут не дебаг. это на выставку достижений индусского хозяйства...

-~{}~ 27.11.07 13:45:

ну так я же со всей таблицей сравниваю все значения из файла...
блин.
ты можешь объяснить - НА КОЙ ТЕБЕ БАЗА? Если ты её используешь ТОЧНО ТАК ЖЕ, КАК ТЕКСТОВЫЙ ФАЙЛ?
 

KorP

Новичок
хорошо, понял что был не прав на счёт сравнения с БД, так должно быть правильнее:
PHP:
$count = count($file);
for($i = $count - 1; $i >= 0; $i--){
$e = explode(" - ", $file[$i]);
if ($query = "SELECT `album` FROM `list` WHERE `album` != '".$e[1]."'") {
$query = "INSERT INTO `list` (`artist`, `album`) VALUES ('".$e[0]."', '".$e[1]."')";
mysql_query($query) or die(mysql_error());
}
}
но при запуске скрипта всё-равно каждый раз добавляет всё из файла в БД
 

akd

dive now, work later
Команда форума
это п#здец какой-то :)

ты понимаешь чем занимается твой код в новой версии? :)
 

Фанат

oncle terrible
Команда форума
KorP
Строчка "if ($query = "SELECT... " достойна быть выбитой в бронзе =)

ты, похоже, действительно - либо сильно с бодуна сегодня, либо с 2005 года ни разу с пхп не сталкивался.

в общем, тебе нужно СНАЧАЛА выполнить запрос, а потому же писать if
 

KorP

Новичок
м...ну можно сказать и с бодуна...правда это проблему не решит :)
 

Фанат

oncle terrible
Команда форума
решит проблему то, что присвоение переменной $query строкового знанчения не выполняет запрос. и не получает результат запроса.
как это сделатиь - прочитай в раделе Статьи, в статье "пхп и мускуль для начинающих"
Вперёд.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху