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)
---------------------------------------------
Tableau d'une base MySQL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?>
-----------------------------------------
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Merci à ceux et celles qui pourront m'aider, j'espère que j'ai été assez clair dans les explications
Partager