Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Дублируются записи
 
 автор: grafen   (02.09.2011 в 08:55)   письмо автору
 
 

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

Есть БД, куда добавляются записи. Параметр уникальности заключается в номере (id), который берется из того места, где беру обновления.

<?php
$nachat
// id с которого начать
$vsite// id которым закончить

for($f=$nachat$f<=$vsite$f++){

$antipovtor mysql_query("SELECT * FROM `obnovlenie` WHERE `idobnov` = '".$f."'");
if(
mysql_num_rows($antipovtor) == 0)
{
mysql_query("INSERT INTO `obnovlenie` VALUES('', '".$parser."', '".$f."', '0')");
}

}
?>


Т.е. циклом прохожу по каким-то id, проверяю у себя в БД, есть ли такой id, если нет, то записываю запись. Но проскакивают дубли, причем дублируется не всегда...

Какие меры принять, чтобы избежать дублей? Как проводить проверку? В чем может быть проблема?

Заранее спасибо!!

  Ответить  
 
 автор: Valick   (02.09.2011 в 09:26)   письмо автору
 
   для: grafen   (02.09.2011 в 08:55)
 

Если при работе с базой данных у вас есть цикл (тем более for) и внутри запрос к БД, то процентов 90 вы делаете что-то неправильно. Вы пытаетесь работать с БД с тем багажом знаний которые получили от РНР, это не совсем правильно. Не MySQL выступает тут помощником, а как раз наоборот РНР. Все должна делать БД, а РНР нужно использовать по возможности только для ввода и вывода информации
__
покажите таблицы и расскажите что и при каких условиях нужно обновлять
скорее всего задача решается одним запросом

[поправлено модератором]

  Ответить  
 
 автор: grafen   (02.09.2011 в 09:54)   письмо автору
 
   для: Valick   (02.09.2011 в 09:26)
 

Есть сторонние сайты, с которыми я договорился и беру информацию. Чтобы не напрягать админов (без экспорта с их стороны), разработал схему парсера стороннего сайта, в котором узнаю последний id на стороннем сайте. После чего, имея этот id, смотрю в свою базу (смотрю последний id, который был добавлен со стороннего сайта). И начинаю перебор страниц от последнего в моей базе до последнего id, который только что узнал на стороннем сайте. Таким образом, я добавляю нужную (новую) инфу со стороннего сайта, себе в базу.

  Ответить  
 
 автор: cheops   (02.09.2011 в 13:49)   письмо автору
 
   для: grafen   (02.09.2011 в 08:55)
 

Мало пока информации... а $f как правило что из себя представляет?

  Ответить  
 
 автор: grafen   (02.09.2011 в 14:33)   письмо автору
 
   для: cheops   (02.09.2011 в 13:49)
 

В $f список id, которые нужно пропарсить на стороннем сервере.
Мне Valick уже дал направление в строну "insert ignore", для начала это попробую :)

  Ответить  
 
 автор: cheops   (02.09.2011 в 16:08)   письмо автору
 
   для: grafen   (02.09.2011 в 14:33)
 

Могу ошибаться, но скорее всего у вас порядок элементов не совпадают, поэтому запрашиваемое значение и содержимое в таблице могу не совпадать. Лучше пока не поздно нормировать таблицу, избавившись от всех последовательностей через запятую. СУБД - это мощное средство для работы со списками, однако, если их хранить в строках, а не с таблицах, приходится реализовывать все алгоритмы обработки списков самостоятельно.

  Ответить  
 
 автор: Valick   (02.09.2011 в 16:13)   письмо автору
 
   для: cheops   (02.09.2011 в 16:08)
 

да оно там вроде и не через запятую, там же цикл, а в цикле запрос
другое дело зачем там ' ' раз id это по идее число

  Ответить  
 
 автор: cheops   (02.09.2011 в 16:26)   письмо автору
 
   для: Valick   (02.09.2011 в 16:13)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования