Mysql теряет 11 записей на вставке - PullRequest
0 голосов
/ 13 июля 2011

Я загружаю XML-файл, содержащий 1048 записей, а затем успешно создаю таблицу ($ today) в своей БД и загружаю XML-данные в таблицу MySQL.

Затем я запускаю второй скрипт, которыйсодержит этот запрос:

INSERT INTO
        t1
(
    modelNumber,
    salePrice

    )
SELECT modelNumber,salePrice
FROM `'.$today.'`

ON DUPLICATE KEY UPDATE t1.modelNumber=`'.$today.'`.modelNumber,
 t1.salePrice=`'.$today.'`.salePrice
");

Это работает, но я теряю 11 записей.Общее количество составляет 1037, а в таблице $ today есть точное количество записей, содержащихся в файле XML (1048).

Как я могу исправить эту проблему?

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Запускает несколько запросов на $ сегодня, чтобы найти ваши 11 дубликатов.

Предложение ON DUPLICATE KEY подавит эти 11 записей.

1 голос
/ 13 июля 2011

Если в вашем файле есть дубликат ключа, вы обновляете старую строку

ON DUPLICATE KEY UPDATE

Означает, что если insert не работает из-за дублированного ключа, вы получите update, упомянутый после этой строки.

Вероятно, есть 11 записей, которые являются дублирующими ключами, и они update, а не insert. Я бы изменил это на это (немного хак, но самый быстрый способ, которым я могу думать без какой-либо дополнительной информации, чтобы найти преступников)

INSERT INTO
        t1
(
    modelNumber,
    salePrice

    )
SELECT modelNumber,salePrice
FROM `'.$today.'`

ON DUPLICATE KEY UPDATE t1.modelNumber=`'.$today.'`.modelNumber,
 t1.salePrice= '999999999'
");

Затем вы можете искать записи с этой продажной ценой за 9999999, и вы, по крайней мере, знаете, какие (или даже если) дублирующиеся ключи вам нужно искать в вашем XML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...