- alors pour ma méthode supprimer j'ai opter pour la méthode déroulante comme tu as dû voir dans mes codes mais ce que je veux savoir c'est comment dans cette commande :
DELETE FROM eleve WHERE idEleve=12;
je fais pour mettre a la place du "12" , l'idEleve que j'aurais "choisis" dans la liste déroulante grâce au nom de l'élève.
Tu remplace le 12 par la variable $idEleve qu'on récupère de la liste déroulante des élèves. ça donne ça:
$sql = 'DELETE FROM eleve WHERE idEleve=' . $idEleve;
- pour l'archivage j'ai créer un idClasse dans "eleve" qui représente les promo : "BTS AG 2009-2011" "BTS NRC 2010-2012" serait t'il possible d'archiver les élèves par classe en regardant l'année?
Oui c'est bien ça, et ça veut dire que les données des élèves de la classe: "BTS AG 2009-2011" ont une durée de vie entre 2009 et 2011 et seront donc archivées et supprimées de la base de données après la fin de 2011.
Mais de toutes façons l'opération d'archivage peut être effectuée à chaque fin d'année pour toute la base de données (copie totale renommée par date).
Par exemple, on peut copier la base de données à la fin de l'année 2011 en la renommant "bd_eleves_2011" en créant le script SQL suivant par phpMyAdmin dans l'onglet "Opérations" puis "Copier la base de données vers: "
CREATE DATABASE `bd_eleves_2011` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
CREATE TABLE `bd_eleves_2011`.`assiduite` ( `date` date NOT NULL ,
`idEleve` int( 11 ) NOT NULL ,
`presence_mat_t1` int( 11 ) NOT NULL DEFAULT '1',
`presence_mat_t2` int( 11 ) NOT NULL DEFAULT '1',
`presence_amidi_t1` int( 1 ) NOT NULL DEFAULT '1',
`presence_amidi_t2` int( 11 ) NOT NULL DEFAULT '1',
`nomProf_mat_t1` varchar( 50 ) NOT NULL ,
`nomProf_mat_t2` varchar( 50 ) NOT NULL ,
`nomProf_amidi_t1` varchar( 50 ) NOT NULL ,
`nomProf_amidi_t2` varchar( 50 ) NOT NULL ,
`nomMatiere_mat_t1` varchar( 50 ) NOT NULL ,
`nomMatiere_mat_t2` varchar( 50 ) NOT NULL ,
`nomMatiere_amidi_t1` varchar( 50 ) NOT NULL ,
`nomMatiere_amidi_t2` varchar( 50 ) NOT NULL ,
UNIQUE KEY `idAssiduite` ( `date` , `idEleve` ) ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
INSERT INTO `bd_eleves_2011`.`assiduite` SELECT * FROM `bd_eleves`.`assiduite`;
CREATE TABLE `bd_eleves_2011`.`eleve` ( `idEleve` int( 11 ) NOT NULL AUTO_INCREMENT ,
`nom` varchar( 20 ) NOT NULL ,
`prenom` varchar( 20 ) NOT NULL ,
`idClasse` varchar( 20 ) DEFAULT NULL ,
PRIMARY KEY ( `idEleve` ) ) ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT =6;
INSERT INTO `bd_eleves_2011`.`eleve` SELECT * FROM `bd_eleves`.`eleve`;
CREATE TABLE `bd_eleves_2011`.`matiere` ( `nom` varchar( 50 ) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
INSERT INTO `bd_eleves_2011`.`matiere` SELECT * FROM `bd_eleves`.`matiere`;
CREATE TABLE `nbre_heures_absence` (
`date` date
,`idEleve` int(11)
,`nbre_heures_absence` decimal(37,0)
);;
CREATE TABLE `nbre_heures_presence` (
`date` date
,`idEleve` int(11)
,`nbre_heures_presence` decimal(36,0)
);;
CREATE TABLE `bd_eleves_2011`.`prof` ( `nom` varchar( 50 ) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
INSERT INTO `bd_eleves_2011`.`prof` SELECT * FROM `bd_eleves`.`prof`;
CREATE TABLE `total_heures_absence` (
`idEleve` int(11)
,`nbre_heures_absence` decimal(37,0)
);;
CREATE TABLE `total_heures_presence` (
`idEleve` int(11)
,`nbre_heures_presence` decimal(36,0)
);;
DROP TABLE IF EXISTS `bd_eleves_2011`.`nbre_heures_absence`;
CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `bd_eleves_2011`.`nbre_heures_absence` AS select `bd_eleves_2011`.`assiduite`.`date` AS `date` ,
`bd_eleves_2011`.`assiduite`.`idEleve` AS `idEleve` ,
sum( ( 8 - ( ( ( ( `bd_eleves_2011`.`assiduite`.`presence_mat_t1` *2 ) + ( `bd_eleves_2011`.`assiduite`.`presence_mat_t2` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t1` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t2` *2 ) ) ) ) AS `nbre_heures_absence` from `bd_eleves_2011`.`assiduite` group by `bd_eleves_2011`.`assiduite`.`date` ,
`bd_eleves_2011`.`assiduite`.`idEleve` ;
DROP TABLE IF EXISTS `bd_eleves_2011`.`nbre_heures_presence`;
CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `bd_eleves_2011`.`nbre_heures_presence` AS select `bd_eleves_2011`.`assiduite`.`date` AS `date` ,
`bd_eleves_2011`.`assiduite`.`idEleve` AS `idEleve` ,
sum( ( ( ( ( `bd_eleves_2011`.`assiduite`.`presence_mat_t1` *2 ) + ( `bd_eleves_2011`.`assiduite`.`presence_mat_t2` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t1` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t2` *2 ) ) ) AS `nbre_heures_presence` from `bd_eleves_2011`.`assiduite` group by `bd_eleves_2011`.`assiduite`.`date` ,
`bd_eleves_2011`.`assiduite`.`idEleve` ;
DROP TABLE IF EXISTS `bd_eleves_2011`.`total_heures_absence`;
CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `bd_eleves_2011`.`total_heures_absence` AS select `bd_eleves_2011`.`assiduite`.`idEleve` AS `idEleve` ,
sum( ( 8 - ( ( ( ( `bd_eleves_2011`.`assiduite`.`presence_mat_t1` *2 ) + ( `bd_eleves_2011`.`assiduite`.`presence_mat_t2` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t1` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t2` *2 ) ) ) ) AS `nbre_heures_absence` from `bd_eleves_2011`.`assiduite` group by `bd_eleves_2011`.`assiduite`.`idEleve` ;
DROP TABLE IF EXISTS `bd_eleves_2011`.`total_heures_presence`;
CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `bd_eleves_2011`.`total_heures_presence` AS select `bd_eleves_2011`.`assiduite`.`idEleve` AS `idEleve` ,
sum( ( ( ( ( `bd_eleves_2011`.`assiduite`.`presence_mat_t1` *2 ) + ( `bd_eleves_2011`.`assiduite`.`presence_mat_t2` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t1` *2 ) ) + ( `bd_eleves_2011`.`assiduite`.`presence_amidi_t2` *2 ) ) ) AS `nbre_heures_presence` from `bd_eleves_2011`.`assiduite` group by `bd_eleves_2011`.`assiduite`.`idEleve` ;
Par contre, il faut procéder à une opération d'épuration ou suppression des données élèves après la fin de leur formation. Et cela concernera toutes les données des élèves ayant un idClasse dont l'année de fin est terminée à savoir (dans notre cas étudié) les données le la table "eleve" et les données "assiduite" concernant les élèves concernés.
Voici une requête SQL qui permet de supprimer les données relationnelles en cascade des élèves (assiduité et élève) en fin de formation par exemple: supprimer les données des formations qui ont eu lieu entre 2009 et 2011:
Attention l'ordre de suppression dans les tables est important: assiduité puis élève.
DELETE assiduite, eleve
FROM assiduite, eleve
WHERE assiduite.idEleve = eleve.idEleve AND eleve.idClasse LIKE '%2009-2011%'
La formule de la condition qui spécifie l'année ciblée est :
idClasse Like '%2009-2011%'
qu'on peut aussi reformuler autrement : les formations qui se terminent en 2011:
idClasse Like '%-2011%' remarque qu'on a mis un tiret avant 2011 car on cible l'année de fin dans la forme d'exemple "2009-2011" où 2009 est l'année de début et (-) 2011 est l'année de fin de formation.
Pour plus d'infos sur l'opérateur LIKE voir la documentation MySQL ou PHP.