- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть парсер, где в таблицу пишутся ID и прочая ерунда, реализовано так
Ну и где-то там далеко внизу идет инсер в базу, где в качестве ID записывается переменная $i
Так как данных много за раз парсер не сможет все окучить да и бось чтобы не забанили, поэтому решил запускать его по категориям.
В этом случае прихожу к проблеме как определить с какого ID продолжать писать.
Так как опыта еще мало, решил это как смог - так:
$i = array();
foreach ($id as $item) {
$i[] = $item;
}
if(!isset($i[0]['MAX(`id`)'])){
$i=0;
} else {
$i= (int)$i[0]['MAX(`id`)'];
}
Проверил, в итоге перед циклом переменная $i принимает верное значение, но вот в самом цикле начинается магия.
В категории, на которой я тестирую - 4 товара.
Если один раз запустить парсер то
если прописано $i=0; запишется 4 товара как и положено, а если мой говнокод с определением максимального ID - то вообще ничего.
Проверяем дальше - запускаем еще раз.
При $i=0; запишется как и положено еще 4 товара, но !!!
если вставить мой быдлокод с определением ID - var_dump($i); мне покажет
что логично и внушает оптимизм :)) но в базу добавятся еще 8 записей вместо 4. (дубли будут)
Понять этого я не могу, надеюсь на вашу помощь.
смысл писать в ИД счетчик? база сама умеет это делать, на поле ИД установить флаг автоинкремент, в запрос вместо $i вставляй NULL
Спасибо за подсказку!! В пхпмайадмин прописал у поля ID автоинкримент, далее так в запросе?
Попробовал прогнать - ничего не записалось
Так тоже попробовал
Попробовал так
В базу записалось 2 одинаковых товара - 2 раза записался первый товар, еще раз прогнал - опять они же записались :))
как-то так
С
мне на первом же прогоне записало 8 записей.
Два раза по 4. Почему так не понятно...
В конце цикла
У меня прописан запрос
Если попробовать после запроса прописать - break;
То в базу запишутся 2 раза первый товар и все. ТОже мне не понятна эта песня.
Сериал "Муки быдлокодера" :D
Частично Решил проблему добавлением уникального индекса на одно из полей :))
Дублей больше нет, но по ID видно что они просто перезаписываются что-ли.
ID не по порядку идут
---------- Добавлено 02.06.2019 в 08:44 ----------
Упростил цикл до минимума
$db->query("INSERT INTO `table` (`id`, `parent_id`, `name`, `4`, `5`, `6`, `7`, `8`, `9`)
VALUES (NULL, '{$linksLevel2[0]['id']}', '0', '0', '0', '0', '0', '0', '');");
}
var_dump($lev3); показывает что в цикл заходят 4 ссылки в виде строк.
Но запуская этот цикл я получаю в базу 8 записей. Почему?
Dram, тут видимо алгоритмические прорехи) само собой ведь ничего не происходит, пишет то что задано, нужно проработать логику и структуру программы, пройди по шагам, что выполняет скрипт, если не найдешь почему так а не так как хочется, попробуй выводить промежуточные результаты... http://phpfaq.ru/debug это изучи, получше любого курса будет, только сразу применяй)
В базу записалось 2 одинаковых товара - 2 раза записался первый товар, еще раз прогнал - опять они же записались )
Видимо, имеет смысл перед записью проверять наличие этого товара в базе.. по какому-то уникальному идентификатору (ID в прайсе, либо название).
А ещё есть фишка - импортировать всю таблицу в таблицу в память (тип Memory) и
а) если товары точно есть
б) старые обновляем, новые добавляем
Не, это все не то. Зачем городить кучу проверок, если банальный цикл из 4 итераций уходит на второй круг, а этого быть не должно априори.
Нужно понять почему так...
если банальный цикл из 4 итераций уходит на второй круг,
Так смотри код.. или кидай, вместе посмотрим )))