2010-01-06 11 views
0

Je sais que lorsque vous faites un INSERT IGNORE les entrées en double sont ignorées et les erreurs deviennent avertissement mais voici ce dont j'ai besoin.Comment puis-je trouver l'ID en double dans une table lors de l'exécution de INSERT IGNORE?

Scénario: Nous avons une table avec 2 colonnes (id, name) où les deux sont UNIQUE et id est PRIMARY KEY.

Lorsque vous faites une INSERT IGNORE sur la colonne name il crée la prochaine AUTO_INCREMENT pour id (même si elle ne marche pas plus tard existe dans votre DB, son juste sautées) et lorsque vous appelez LAST_INSERT_ID il vous donne la prochaine id que. Cependant, j'ai besoin de trouver le id qui a provoqué l'ignorance de la requête. En d'autres termes, le id du name était un doublon.

Toute astuce MySQL/PHP est la bienvenue. :)

Merci.

Répondre

0

Je ne pense pas que vous pouvez extraire cette information avec INSERT IGNORE. Même si le texte d'avertissement contient la valeur de la clé, il n'y a que beaucoup d'avertissements mis en mémoire tampon, donc vous ne pouvez pas compter sur cela.

J'essayerais probablement de réécrire la requête afin qu'elle évite d'insérer un doublon. Vous pouvez toujours détecter les clés avant la main en faisant une

SELECT id FROM tab WHERE name in ('...value1...',...,'...valueN...') 

Selon le format des données que vous souhaitez insérer, et la façon dont vous faites les inserts (en vrac, ou une ligne à la fois), vous pouvez faire plusieurs choses pour éviter d'insérer des doublons connus.

Si d'autre part vous avez eu l'idée d'extraire les ID des prétendus doublons pour effectuer une mise à jour pour les lignes à la place, vous devez utiliser la syntaxe REPLACE (http://dev.mysql.com/doc/refman/5.1/en/replace.html) ou la ON DUPLICATE KEY UPDATE construction (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html)

+0

C'était l'idée initiale mais j'essayais de garder mes requêtes au minimum. Après quelques heures de recherche, j'ai abandonné et j'ai décidé de simplement nettoyer mes données d'insertion d'entrées en double et l'insérer. Merci pour ton aide. – Borislav

Questions connexes