За последние 24 часа нас посетили 17512 программистов и 1651 робот. Сейчас ищет 1481 программист ...

добавление одинаковых данных в БД

Тема в разделе "PHP и базы данных", создана пользователем olejan1991, 17 мар 2012.

  1. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    Возникла такая проблема : как сделать так чтобы в БД при парсинге не добавлялись записи, которые уже есть в БД?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    уникальный индекс + при вставке insert ignore
     
  3. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    наверно я не правильно изложил суть проблемы
    существует БД с таблицей с полями уникальный ключ и данные.
    при 1м парсинге в нее забиваются данные, а вот при 2м парсинге происходит дублирование данных, а мне нужно чтобы добавлялись только новые данные
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А чем тебе insert ignore не нравится.
    Будет при втором запросе вставляться только новые данные
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    построй индекс уникальный по тем полям, которые в куче уникальны. и при вставке будет ошибка, а при вставке ignore будет просто проигнорено это дело. так что напихаются в базу только новые данные.

    вобще это все не от хорошей жизни конечно...
     
  6. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    насчет последней фразы не понял....
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в идеальных условиях такие ситуации возникать не должны =)
     
  8. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    просто при повторном запуске парсинга код начинает проходить ведь с самого начала и соответственно добавляется информация в БД, а т. к. на сайте с которого парсится инфа есть и старая инфа, то она также добавляется в БД и происходит дублирование.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну вот только когда невозможно наладить нормальные отношения со второй стороной, такие ситуации и возникают.
     
  10. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    блин, не пойму как insert ignore прикрутить сюда $this->pdo->query("INSERT IGNORE INTO {$this->table} (`content`) VALUES ('$insert')");
    вот вроде прописал insert ignore, а записи все равно дублируются. Может не так прописал?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сработает только если будет конфликт индексов. т.е. должен в таблице быть индекс который будет уникальным для той части данных, что ты впендюриваешь туда. =)
     
  12. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    но ведь индекс создается автоматически и постоянно разный, как в моем случае делать?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет. индекс автоматически не создается. в pma зайди и выбери колонки, сочетание которых уникально.
     
  14. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    колонка id уникальна а вот колонка с содержимым,которое дублируется не уникально
    там на id авто инкримент стоит и поэтому он заполняется автоматически и постоянно уникальный, а дублируется текст который в след колонке
    нужно чтобы проверяло есть ли запись в колонке с текстом такая которая добавляется
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык поставь уникальный индекс на запись
     
  16. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    так если у записи будут уникальный индекс, то при следующей записи этот индекс буде уже другой и произойдет та же история и,кстати, id итак ведь уникальный
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты странный. тебе пять раз сказано: по тому критерию, по которому ты считаешь должны быть уникальными твои строки, и создай по нему уникальный индекс. после - используй insert ignore.

    всё.
     
  18. olejan1991

    olejan1991 Активный пользователь

    С нами с:
    27 фев 2012
    Сообщения:
    25
    Симпатии:
    0
    сделал,спасибо,работает
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) Побьеда!