PHP & MySQL : éviter les doublons dans la table.
Bonjour,
J'ai un soucis avec un script d'ajout d'entrées en masse dans une table MySQL.
1° Le script génères les informations dans un tableau (array). Et supprime les doublons à l'intérieur de ce tableau (array_unique()). D'une autre part, j'ai une table MySQL prête à accueillir ces données, elle aussi est nette de doublons.
2° Une boucle ajoute chaque éléments du tableau dans la table de la base de données.
3° C'est là que je coince. Comment vérifier que l'info du tableau n'est pas déjà dans la bdd ?
J'ai quelques pistes et idées :
- utilisation de la requête REPLACE INTO, avec l'utilisation d'une clef UNIQUE. C'est la solution qui m'a semblé la plus adaptée à mon problème.
- copie intégrale de la table (et puis la vider intégralement) et placer les info dans un array, ensuite coupler les deux array (celle générée par le script + copie de la table) et supprimer les doublons possibles avec array_unique() ensuite remettre tout dans la base de données. Mais ça va horriblement ralentir la vitesse d'exécution, donc l'idée n'est pas bonne.
Pour info et une meilleur compréhension :
Liste (array créer par le script)
---------------------------------------------
Code:
1 2 3 4 5 6 7 8 9 10
|
<?php
$liste=array([0] => "donnée 6381",
[1] => "donnée 7256",
[2] => "donnée 0692",
[3] => "donnée 1829",
[4] => "donnée 3044",
[5] => "donnée 9670");
// Cette liste ne contient pas de doublons
?> |
Tableau d'une base MySQL
-----------------------------------------
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
ID | donnee | date | ..... |
-----------------------------------------
0 donnée 1235 YYYY .....
1 donnée 0987 YYYY .....
2 donnée 3456 YYYY .....
3 donnée 9670 YYYY .....
4 donnée 2345 YYYY .....
5 donnée 4321 YYYY .....
6 donnée 9854 YYYY .....
7 donnée 6798 YYYY .....
8 donnée 5463 YYYY .....
9 donnée 6574 YYYY .....
// Cette liste est également saine de doublons. |
Maintenant, si j'ajoute touts les éléments de la liste à la suite, les entrées d'ID 3 et 15 seront des doubles de part leur champ 'donnee' . Voilà un exemple concret de ce que je voudrait éviter.
Merci à ceux et celles qui pourront m'aider, j'espère que j'ai été assez clair dans les explications :)