exporter une ligne d'une table
Posté : 20 oct. 2011, 17:46
par VaN
Bonjour,
sur mon projet, j'ai une table dont les lignes sont souvent sujet à modification, et je vais logger chaque modification effectué sur les lignes de cette table. Dans ma table de log, j'aimerai stocké l'état de la ligne, avant modification, si possible quelque chose qui me permettrait de revenir très rapidement à l'état précédent. J'ai donc pensé à stocker la ligne complète, sous forme de requête SQL, prête à être ré-importée si besoin.
ma table de loggant les modifications ressemblerait à ça :
ID | FICHIER_ID | DATETIME | ETAT_PRECEDENT
1 | 1 | 2011-10-20 17:22:15 | DELETE FROM `fichiers`WHERE id = 1; INSERT INTO `fichiers` (`id`, `client_id`, `type_id`, `posteur_id`, `auteur_id`, `datetime`, `annee`, `titre`, `fichier`, `commentaire`) VALUES
(1, 1, 6, 1, 1, '2011-10-20 12:58:06', 2011, 'photo', '2011-1-thumbl_980x340.png', 'sfgsfg');
Est-ce possible en PHP de récupérer de manière plus ou moins automatisée une requête de ce genre ?
Re: exporter une ligne d'une table
Posté : 20 oct. 2011, 19:10
par soycd
Pas compris où tu voulais en venir, mais une restauration automatisée en php, nope, je crois pas que ça existe
Après il suffit simplement de faire une table de sauvegarde pour y enregistrer l'historique des changements, ce qui est quand même plus aisé à gérer.
La syntaxe sql INSERT SELECT permet de faire une restauration en deux coups de cuillère à pot.
Re: exporter une ligne d'une table
Posté : 21 oct. 2011, 10:16
par VaN
Après il suffit simplement de faire une table de sauvegarde pour y enregistrer l'historique des changements, ce qui est quand même plus aisé à gérer.
C'est ce que je voudrai faire, mais plutôt que de plus ou moins dupliquer ma table fichiers, pour en faire une nouvelle table avec les même champs, stockant les valeurs de la ligne avant modification, je voudrai stocker toute la ligne sous forme de requête SQL, prête à être re-injectée dans phpMyAdmin pour revenir à une ancienne version de mes données.
Disons que dans ma table fichier, j'ai la ligne suivante :
Code : Tout sélectionner
id | titre | description | fichier
1 | hello | blablabla |fichier-1.jpg
Via mon interface, je vais une modif sur ce fichier, qui se transforme en
Code : Tout sélectionner
id | titre | description | fichier
1 |salut | blobloblo | fichier-1.jpg
je voudrai dans ma table d'historique des changements, logger quelque chose du genre :
Code : Tout sélectionner
id | date | fichier_id | etat precedent
1 | 2011-10-21 | 1 | DELETE FROM fichiers WHERE id = 1; INSERT INTO fichiers VALUES(1, 'hello', 'blablabla', 'fichier-1.jpg');
plutôt que de reprendre chaque champ de ma table fichiers et d'avoir une table de sauvegarde du genre :
Code : Tout sélectionner
id | date | fichier_id | ancien_titre | ancienne_description | ancien_fichier
1 | 2011-10-21 | 1 | hello | blablabla | fichier-1.jpg
Ce qui m'éviterai de devoir retoucher la table de sauvegarde, le jour où je rajoute des champs dans ma table fichier. Et surtout, qui me permettrait de re-importer très rapidement une données à son état précédent, via une requête toute prête. Vu que c'est le genre de requête que sort un export SQL, je me suis dit que c'était peut-être faisable.
Re: exporter une ligne d'une table
Posté : 21 oct. 2011, 11:43
par moogli
salut,
l'export SQL c'est le soft qui créer la requete que tu a dans ton fichier.
après il y a moyen de créer des fonctions / procédures sur le serveur SQL qui pourrait te permettre de la faire.
imagine, ta fonction prend en paramètre le nom de la table d'origine et l'id de la ligne et te fait ce que tu souhaite.
pour cela dans ta fonction/ procédure tu fait un select la table de sauvegarde et tu l'emploi pour un update (plutot qu'un delete / insert car l'auto_increment va changer l'id et la c'est la merde). D'ailleurs cette même fonction peu très modifier la table de sauvegarde pour revenir à celle que l'on viens de modifer

)
un peux de lecture sur le sujet
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L7
@+