Et il n'y a pas d'outils pour gérer ça un peu plus "joliment"
J'imagine l'utilisation d'un ORM comme Propel ou Doctrine.
Tu crées une classe (ou un schéma) pour chaque table.
Tu définis les transitions d'une classe à l'autre
Sinon on va revenir à la méthode que tu évoques et essayer de voir comment l'appliquer sur mon cas concret.
Voici un export des tables dans les 2 wikis
Commençons par la
Table users
-----------
Wikini (le wiki original)
Code : Tout sélectionner
INSERT INTO `wikini_users` (`name`, `password`, `email`, `motto`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`) VALUES
('MonUser', 'hashmd5', '[email protected]', '', 20, 50, 'Y', '2009-01-01 10:08:12', 'N');
Wikka (le nouveau wiki
Code : Tout sélectionner
INSERT INTO `wikka_users` (`name`, `password`, `email`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`, `status`) VALUES
('MonUser', 'hashmd5', '[email protected]', 20, 50, 'Y', '2009-01-01 10:55:24', 'N', NULL);
Comment fais-tu ton INSERT SELECT ?
moi j'ai fait ça
Code : Tout sélectionner
INSERT INTO `wikka_users`
(`name`, `password`, `email`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`)
SELECT `name`, `password`, `email`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`
FROM `wikini_users`
Je ne peux pas avec la même requete remplir les champs des la nouvelle table qui n'ont pas d'équivalent dans l'ancienne (en mettant un valeur par défaut)
ou suis-je obligé de faire un UPDATE après pour fixer ces champs ?
J'ai ensuite quelque chose d'un poil plus compliqué avec la table acls (Access Control List).
C'est la table qui gère les droits de lecture/ecriture/commentaire sur chaque page
Table acls
----------
Wikini
Code : Tout sélectionner
INSERT INTO `wikini_acls` (`page_tag`, `privilege`, `list`) VALUES
('PagePrincipale', 'write', 'MonUser'),
('PagePrincipale', 'read', '*'),
('PagePrincipale', 'comment', '+');
Wikka
Code : Tout sélectionner
INSERT INTO `wikka_acls` (`page_tag`, `read_acl`, `write_acl`, `comment_acl`) VALUES
('PagePrincipale', '*', 'MonUser', '+');
Comme tu peux voir dans le nouveau wiki pour une page il y a un seul enregistrement dans la table
alors que pour le wiki original il y en a 3
J'ai donc pensé à faire ça en 3 fois.
Code : Tout sélectionner
-- ajouter un enregistrement par page pour les acls en lecture
INSERT INTO `wikka_acls`
(`page_tag`, `read_acl`)
SELECT `page_tag`, `list`
FROM `wikini_acls` WHERE `privilege` LIKE 'read'
ça c'est ok
Code : Tout sélectionner
-- modifier l'enregistrement pour les acls en ecriture
UPDATE `wikka_acls`
SET `write_acl` = `wikini_acls`.`list`
WHERE `wikini_acls`.`page_tag`=`wikka_acls`.`page_tag`
par contre là ça ne fonctionne pas (je ne suis pas un spécialiste des jointures)
MySQL a répondu:Documentation
#1109 - Unknown table 'wikini_acls' in where clause
et il faudrait faire quelque chose de similaire pour les acls des commentaires
Merci d'avance
Et il n'y a pas d'outils pour gérer ça un peu plus "joliment"
J'imagine l'utilisation d'un ORM comme Propel ou Doctrine.
Tu crées une classe (ou un schéma) pour chaque table.
Tu définis les transitions d'une classe à l'autre
Sinon on va revenir à la méthode que tu évoques et essayer de voir comment l'appliquer sur mon cas concret.
Voici un export des tables dans les 2 wikis
Commençons par la
Table users
-----------
Wikini (le wiki original)
[code]INSERT INTO `wikini_users` (`name`, `password`, `email`, `motto`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`) VALUES
('MonUser', 'hashmd5', '
[email protected]', '', 20, 50, 'Y', '2009-01-01 10:08:12', 'N');[/code]
Wikka (le nouveau wiki
[code]INSERT INTO `wikka_users` (`name`, `password`, `email`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`, `status`) VALUES
('MonUser', 'hashmd5', '
[email protected]', 20, 50, 'Y', '2009-01-01 10:55:24', 'N', NULL);[/code]
Comment fais-tu ton INSERT SELECT ?
moi j'ai fait ça
[code]INSERT INTO `wikka_users`
(`name`, `password`, `email`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`)
SELECT `name`, `password`, `email`, `revisioncount`, `changescount`, `doubleclickedit`, `signuptime`, `show_comments`
FROM `wikini_users` [/code]
Je ne peux pas avec la même requete remplir les champs des la nouvelle table qui n'ont pas d'équivalent dans l'ancienne (en mettant un valeur par défaut)
ou suis-je obligé de faire un UPDATE après pour fixer ces champs ?
J'ai ensuite quelque chose d'un poil plus compliqué avec la table acls (Access Control List).
C'est la table qui gère les droits de lecture/ecriture/commentaire sur chaque page
Table acls
----------
Wikini
[code]INSERT INTO `wikini_acls` (`page_tag`, `privilege`, `list`) VALUES
('PagePrincipale', 'write', 'MonUser'),
('PagePrincipale', 'read', '*'),
('PagePrincipale', 'comment', '+');[/code]
Wikka
[code]INSERT INTO `wikka_acls` (`page_tag`, `read_acl`, `write_acl`, `comment_acl`) VALUES
('PagePrincipale', '*', 'MonUser', '+');[/code]
Comme tu peux voir dans le nouveau wiki pour une page il y a un seul enregistrement dans la table
alors que pour le wiki original il y en a 3
J'ai donc pensé à faire ça en 3 fois.
[code]-- ajouter un enregistrement par page pour les acls en lecture
INSERT INTO `wikka_acls`
(`page_tag`, `read_acl`)
SELECT `page_tag`, `list`
FROM `wikini_acls` WHERE `privilege` LIKE 'read'
[/code]
ça c'est ok
[code]
-- modifier l'enregistrement pour les acls en ecriture
UPDATE `wikka_acls`
SET `write_acl` = `wikini_acls`.`list`
WHERE `wikini_acls`.`page_tag`=`wikka_acls`.`page_tag`
[/code]
par contre là ça ne fonctionne pas (je ne suis pas un spécialiste des jointures)
MySQL a répondu:Documentation
#1109 - Unknown table 'wikini_acls' in where clause
et il faudrait faire quelque chose de similaire pour les acls des commentaires
Merci d'avance