Nettoyer une table SQL via PHP
Posté : 16 mai 2014, 18:02
Bonjour, pour ceux qui souhaite nettoyer leur table ( trier / arranger les 'id' ) puis modifier l'AUTO_INCREMENTE de leur table, je vous propose ce petit script :
- $key : Stock une clé de base qui s'incrémente à chaque boucle de manière continue ( 1, 2, 3, ... ), ce qui nous servira pour trier les id du type : 1, 2, 5, 6, 8, 12 ...
- On parcourt notre résultat dans un foreach grâce à un iterator disponible depuis php 5.4 pour traiter le résultat.
- On vérifie si l'id est différent de notre $key et si ils le sont alors ont met à jour la ligne en question !
- Une fois toutes les ligne traiter, on met à jour l'AUTO_INCREMENT de votre table à la dernière valeur de $key.
Et voila ! En esperant que cela vous sera utilise
/* votre connexion sql ... */
$mysqli= new mysqli("host", "user", "pw", "db");
$key = 1;
$q = $mysqli->query("SELECT id FROM matable");
foreach($q as $r) { // Utilisation d'un iterator intégrer depuis php 5.4
if($r["id"] != $key) {
$mysqli->query("UPDATE matable SET id='$key' WHERE id='{$r["id"]}'");
}
$key++;
}
$mysqli->query("ALTER TABLE matable AUTO_INCREMENT=$key");
$mysqli->close();
Explications :- $key : Stock une clé de base qui s'incrémente à chaque boucle de manière continue ( 1, 2, 3, ... ), ce qui nous servira pour trier les id du type : 1, 2, 5, 6, 8, 12 ...
- On parcourt notre résultat dans un foreach grâce à un iterator disponible depuis php 5.4 pour traiter le résultat.
- On vérifie si l'id est différent de notre $key et si ils le sont alors ont met à jour la ligne en question !
- Une fois toutes les ligne traiter, on met à jour l'AUTO_INCREMENT de votre table à la dernière valeur de $key.
Et voila ! En esperant que cela vous sera utilise