Je vais exécuter des milliers de requêtes dans SQL et j'ai besoin d'empêcher la duplication du champ 'domaine'. Je n'ai jamais eu à le faire auparavant et toute aide serait appréciée.Empêcher les insertions en double dans SQL avec PHP
Répondre
Vous souhaitez probablement créer une contrainte "UNIQUE" sur le champ "Domaine" - cette contrainte génère une erreur si vous créez deux lignes ayant le même domaine dans la base de données. Pour une explication, voir this tutorial in W3C school -
http://www.w3schools.com/sql/sql_unique.asp
Si cela ne résout pas votre problème, s'il vous plaît clarifier la base de données que vous avez choisi d'utiliser (MySql?). REMARQUE: Cette contrainte est complètement distincte de votre choix de PHP en tant que langage de programmation, c'est une chose de définition de base de données SQL. Un énorme avantage de l'expression de cette contrainte dans SQL est que vous pouvez faire confiance à la base de données pour préserver la contrainte même lorsque des personnes importent/exportent des données de la base de données, votre application est boguée ou une autre partage la base de données.
Je ne suis pas vraiment sûr d'avoir compris votre question, mais peut-être cherchez-vous le "UNIQUE" constraint de SQL. Si la requête tente d'insérer une valeur préexistante dans un champ, vous (PHP) serez averti de cette violation de contrainte.
Il y a plusieurs façons d'aborder cela. Vous pouvez définir une contrainte unique (comme une clé primaire) sur cette colonne. Cela entraînera l'échec de l'insertion si ce domaine a également été inséré. Vous pouvez également insérer tous les domaines en double et les supprimer plus tard. Cela fonctionnera bien si pas beaucoup de domaines sont dupliqués. Il existe déjà quelques questions sur la recherche de doublons.
S'il s'agit d'une exigence absolue d'intégrité de la base de données (elle ne changera probablement pas et que les données existantes ne présentent pas ce problème), je l'appliquerai à la base de données avec une contrainte unique.
En ce qui concerne la détection avant ou après la tentative afin de notifier l'utilisateur, il existe un certain nombre de techniques qui pourraient être utilisées.
Cela peut être fait avec sql, plutôt qu'avec php. Je suppose que vous utilisez MySQl, mais les mêmes principes fonctionneront avec différentes bases de données.
rend la colonne Domaine la clé primaire. (logique, car il doit unique.)
Plutôt que d'utiliser INSERT, utilisez UPDATE.
Si la clé primaire existe déjà (que vous essayez de mettre dans la table), update mettra à jour le tuple existant, plutôt que de créer un nouveau tuple. Ainsi, vous écraserez les données existantes si elles sont différentes et si elles sont identiques, la mise à jour sera ignorée.
D'où proviennent les données? Est-ce quelque chose que vous ne voulez exécuter qu'une seule fois, ou plusieurs fois, ou souvent? Si la valeur du domaine existe déjà, voulez-vous simplement ignorer l'insertion ou faire autre chose (par exemple incrémenter un compteur)?
En fonction de vos réponses, il existe de nombreuses solutions possibles:
de trier vos données, éliminer les doublons, puis insérez (en supposant que les données relativement statiques, table vide pour commencer)
Utiliser un tableau associatif dans PHP comme cache de valeur de domaine local (si le tableau contient déjà des données, commencez par lire le contenu existant; non thread-safe, mais fonctionne s'il s'exécute uniquement une fois à la fois)
Marque domaine une colonne et code wrapper écrire pour gérer renvoyer des erreurs
Marque domaine une colonne UNIQUE ou PRIMARY KEY et utiliser une clause KEY Duplicate UNIQUE: INSERT INTO mydata (domaine, compte) VALEURS (' firstdomain', 1), ('seconddomain', 1), ('thirddomain', 1) sur le nombre DUPLICATE KEY UPDATE = count + 1
Insérer toutes les données dans la table, puis supprimer les doublons
Notez que les insertions de traitement par lots (c'est-à-dire en utilisant des clauses à valeurs multiples par instruction) peuvent être considérablement plus rapides.
- 1. Asp.Net SQL Actualiser les insertions de la page en double?
- 2. Quelle est la meilleure méthode pour arrêter les insertions en double dans la base de données
- 3. AMQP Retarder la livraison et empêcher les messages en double
- 4. Empêcher double Entrée en Hashtable C++
- 5. Insertions SQL par lots dans .NET
- 6. double $ déclaration en php
- 7. Comment détecter les valeurs en double dans un tableau PHP?
- 8. Comment éliminer les calculs en double dans SQL?
- 9. Comment empêcher les insertions JPA de verrouiller une table de base de données?
- 10. sql contraintes uniques et de réglage sur les insertions
- 11. Comment vérifier les fichiers en double en php?
- 12. Comment gérer les grandes insertions par lots SQL SERVER?
- 13. Lignes en double dans Oracle
- 14. Comment gérez-vous les insertions de section avec un NSFetchedResultsController?
- 15. Trouver un contenu en double en utilisant MySQL et PHP
- 16. Problème avec instruction SQL en utilisant PHP
- 17. Suppression de requêtes SQL en double aide
- 18. Comment puis-je empêcher les avis PHP d'apparaître dans wordpress?
- 19. Comment empêcher NHibernate de créer des enregistrements en double pour les objets référencés
- 20. Empêcher les bordures en double sur la table imbriquée (la frontière-collapse ne fonctionne pas)
- 21. Comment empêcher les adresses e-mail en double sur un formulaire d'inscription d'utilisateur?
- 22. Les insertions SQL simultanées dans la même table sont-elles transactionnelles?
- 23. supprimer les lignes en double
- 24. Résultat en double
- 25. Comment supprimer des données en double dans SQL Server?
- 26. trouver toutes les valeurs en double dans un attribut d'élément
- 27. Comment empêcher l'utilisation du type incorrect en PHP?
- 28. avec select double dans Hibernate
- 29. mysql en double erreur d'entrée quand il n'y a pas d'entrée en double (charge en vrac via php)
- 30. Variables en double dans JavaScript