Bonjour à tous,
J'ai un léger problème dans la conception de mon appli SQL. Je vous explique le principe : j'ai trois tables.
Première table :
Cette table référencie des pages.
Seconde table :
Cette table contient les blocs de texte présents sur la page.
Troisième table :
Cette table contient les textes et autres infos sur les blocs de texte sus-mentionnés (notes invisibles selon les moments, etc).
Assez logiquement, il y a plusieurs blocs sur une page, et plusieurs configurations par blocs. Le problème est le suivant : j'aimerais pouvoir dupliquer des pages en copiant tout leur contenu, configurations comprises, de l'une à l'autre. Pour créer une nouvelle page, pas de problèmes, un INSERT INTO marche bien. Pour copier la liste des blocs et leurs positions, idem, INSERT INTO ... SELECT ...
Et c'est là qu'arrive le problème, parce que j'ai alors dans ma table de blocs les nouveaux blocs... Mais je ne sais pas quel est l'id de l'ancien bloc qui correspond. Du coup, je ne sais pas comment faire pour copier les valeurs de la table de configuration en leur affectant le nouvel id de bloc, vu que je n'ai pas gardé de liens entre les anciens et les nouveaux blocs... et vu que la numérotation des blocs se base sur l'auto_increment, je ne sais pas trop comment faire.
J'avais bien pensé à récupérer au moment de débuter les requêtes le numéro de l'auto-incrément sur la table des blocs et de l'augmenter du nombre de blocs voulus en espérant que ça se range dans le bon ordre et qu'il n'y ai pas deux duplications simultanées (ce qui en théorie ne devrait pas arriver, la création d'une nouvelle page est relativement rare, mais on ne sait jamais) mais ça me semble bien... hasardeux, disons.
Est-ce que vous auriez une autre idée qui serait plus pratique que celle-ci ? Hormis faire un select puis des insert/select à la pelle ?
Merci !
J'ai un léger problème dans la conception de mon appli SQL. Je vous explique le principe : j'ai trois tables.
Première table :
Code :
CREATE TABLE `cubik_pages` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`url` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Cette table référencie des pages.
Seconde table :
Code :
CREATE TABLE `cubik_blocs` (
`id` int(11) NOT NULL auto_increment,
`page` int(11) NOT NULL,
`bloc` varchar(30) NOT NULL,
`group` varchar(30) NOT NULL,
`x` int(11) NOT NULL,
`y` int(11) NOT NULL,
`width` int(11) NOT NULL default '10',
`height` int(11) NOT NULL default '10',
`configLevel` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `page` (`page`),
CONSTRAINT `cubik_blocs_ibfk_1` FOREIGN KEY (`page`) REFERENCES `cubik_pages` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Cette table contient les blocs de texte présents sur la page.
Troisième table :
Code :
CREATE TABLE `cubik_configuration` (
`id` int(11) NOT NULL auto_increment,
`bloc` int(11) default NULL,
`key` varchar(30) NOT NULL,
`value` longtext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Unique_BlocKey` (`bloc`,`key`),
KEY `bloc` (`bloc`),
CONSTRAINT `cubik_configuration_ibfk_1` FOREIGN KEY (`bloc`) REFERENCES `cubik_blocs` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Cette table contient les textes et autres infos sur les blocs de texte sus-mentionnés (notes invisibles selon les moments, etc).
Assez logiquement, il y a plusieurs blocs sur une page, et plusieurs configurations par blocs. Le problème est le suivant : j'aimerais pouvoir dupliquer des pages en copiant tout leur contenu, configurations comprises, de l'une à l'autre. Pour créer une nouvelle page, pas de problèmes, un INSERT INTO marche bien. Pour copier la liste des blocs et leurs positions, idem, INSERT INTO ... SELECT ...
Et c'est là qu'arrive le problème, parce que j'ai alors dans ma table de blocs les nouveaux blocs... Mais je ne sais pas quel est l'id de l'ancien bloc qui correspond. Du coup, je ne sais pas comment faire pour copier les valeurs de la table de configuration en leur affectant le nouvel id de bloc, vu que je n'ai pas gardé de liens entre les anciens et les nouveaux blocs... et vu que la numérotation des blocs se base sur l'auto_increment, je ne sais pas trop comment faire.
J'avais bien pensé à récupérer au moment de débuter les requêtes le numéro de l'auto-incrément sur la table des blocs et de l'augmenter du nombre de blocs voulus en espérant que ça se range dans le bon ordre et qu'il n'y ai pas deux duplications simultanées (ce qui en théorie ne devrait pas arriver, la création d'une nouvelle page est relativement rare, mais on ne sait jamais) mais ça me semble bien... hasardeux, disons.
Est-ce que vous auriez une autre idée qui serait plus pratique que celle-ci ? Hormis faire un select puis des insert/select à la pelle ?
Merci !