[quote]
CREATE TABLE IF NOT EXISTS `cnje_audits` (
`audit_id` int(11) NOT NULL AUTO_INCREMENT,
`audit_je_id` int(11) NOT NULL,
`audit_session_id` int(11) NOT NULL,
`audit_debut` date NOT NULL,
`audit_fin` date NOT NULL,
`audit_date` date NOT NULL,
`audit_date_decision_date` date NOT NULL,
`audit_pregrille_orga` varchar(100) NOT NULL,
`audit_pregrille_orga_date` date NOT NULL,
`audit_pregrille_treso` varchar(100) NOT NULL,
`audit_pregrille_treso_date` date NOT NULL,
`audit_grille_orga` varchar(100) NOT NULL,
`audit_grille_orga_date` date NOT NULL,
`audit_grille_treso` varchar(100) NOT NULL,
`audit_grille_treso_date` date NOT NULL,
`audit_CR_admin` varchar(100) NOT NULL,
`audit_CR_admin_date` date NOT NULL,
`audit_CR_debrief` varchar(100) NOT NULL,
`audit_CR_debrief_date` date NOT NULL,
`audit_decision` tinyint(4) NOT NULL,
`audit_decision_date` date NOT NULL,
`audit_CDC` varchar(100) NOT NULL,
`audit_courrier` varchar(100) NOT NULL,
`audit_courrier_date` date NOT NULL,
`audit_etape` tinyint(4) NOT NULL,
`audit_statut` tinyint(4) NOT NULL,
PRIMARY KEY (`audit_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=147 ;
--
-- Contenu de la table `cnje_audits`
--
INSERT INTO `cnje_audits` (`audit_id`, `audit_je_id`, `audit_session_id`, `audit_debut`, `audit_fin`, `audit_date`, `audit_date_decision_date`, `audit_pregrille_orga`, `audit_pregrille_orga_date`, `audit_pregrille_treso`, `audit_pregrille_treso_date`, `audit_grille_orga`, `audit_grille_orga_date`, `audit_grille_treso`, `audit_grille_treso_date`, `audit_CR_admin`, `audit_CR_admin_date`, `audit_CR_debrief`, `audit_CR_debrief_date`, `audit_decision`, `audit_decision_date`, `audit_CDC`, `audit_courrier`, `audit_courrier_date`, `audit_etape`, `audit_statut`) VALUES
(96, 137, 1, '2009-12-17', '2010-01-16', '0000-00-00', '0000-00-00', '', '0000-00-00', '', '0000-00-00', '', '0000-00-00', '', '0000-00-00', '', '0000-00-00', '', '0000-00-00', 0, '0000-00-00', '', '', '0000-00-00', 1, 0),
(103, 157, 1, '2009-12-17', '2010-01-16', '2010-07-30', '2010-04-30', 'pregrille_orga_103_20100430123211.xml', '2010-04-30', 'pregrille_treso_103_20100430123211.xml', '2010-04-30', 'grille_orga_103_20100430123236.xml', '2010-04-30', 'grille_treso_103_20100430123435.xml', '2010-04-30', '', '0000-00-00', '', '0000-00-00', 2, '2010-04-29', '', 'courrier_103_20100430124051.pdf', '2010-04-30', 3, 0),
--
-- Structure de la table `cnje_junior_entreprises`
--
CREATE TABLE IF NOT EXISTS `cnje_junior_entreprises` (
`je_id` smallint(6) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`je_id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=246 ;
--
-- Contenu de la table `cnje_junior_entreprises`
--
INSERT INTO `cnje_junior_entreprises` (`je_id`) VALUES
(53),
(113),
(137),
(157),
-- --------------------------------------------------------
--
-- Structure de la table `cnje_liaisons_audits_auditeurs`
--
CREATE TABLE IF NOT EXISTS `cnje_liaisons_audits_auditeurs` (
`laa_id` int(11) NOT NULL AUTO_INCREMENT,
`laa_audit_id` int(11) NOT NULL,
`laa_auditeur_id` int(11) NOT NULL,
PRIMARY KEY (`laa_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- Contenu de la table `cnje_liaisons_audits_auditeurs`
--
INSERT INTO `cnje_liaisons_audits_auditeurs` (`laa_id`, `laa_audit_id`, `laa_auditeur_id`, `laa_prix_billets`, `laa_grille_orga`, `laa_grille_orga_date`, `laa_grille_treso`, `laa_grille_treso_date`, `laa_CR`, `laa_CR_date`) VALUES
(2, 103, 417, 0, '', '0000-00-00', '', '0000-00-00', '', '0000-00-00'),
(4, 96, 2, 0, '', '0000-00-00', '', '0000-00-00', '', '0000-00-00');
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `cnje_postes` (
`poste_id` int(11) NOT NULL AUTO_INCREMENT,
`poste_user_id` int(11) NOT NULL,
`poste_session_type` tinyint(1) NOT NULL,
`poste_je_id` int(11) NOT NULL,
`poste_debut` date NOT NULL,
`poste_fin` date NOT NULL,
`poste_statut` tinyint(1) NOT NULL,
PRIMARY KEY (`poste_id`),
KEY `poste_user_id` (`poste_user_id`),
KEY `poste_session_type` (`poste_session_type`),
KEY `poste_je_id` (`poste_je_id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=765 ;
--
-- Contenu de la table `cnje_postes`
--
INSERT INTO `cnje_postes` (`poste_id`, `poste_user_id`, `poste_session_type`, `poste_je_id`, `poste_debut`, `poste_fin`, `poste_niveau_id`, `poste_pole_id`, `poste_type_id`, `poste_titre`, `poste_statut`) VALUES
(2, 2, 1, 1, '2010-02-01', '2010-04-30', 3, 19, 44, 'Prestataire Kiwi', 1),
(149, 146, 2, 53, '2009-12-24', '2010-12-23', 2, 1, 2, 'Vice-Président', 1),
(150, 146, 2, 53, '2009-12-24', '2010-12-23', 1, 8, 19, 'Chargée d''affaires', 1),
(322, 342, 2, 113, '2010-01-01', '2011-01-01', 3, 4, 11, 'chargé de projet qualité', 1),
(380, 417, 2, 137, '2010-01-15', '2011-01-15', 3, 19, 43, 'Responsable SI', 1),
(762, 2, 2, 157, '2010-04-01', '0000-00-00', 2, 1, 1, 'Président', 1);
--
-- Structure de la table `cnje_users`
--
CREATE TABLE IF NOT EXISTS `cnje_users` (
`user_id` mediumint(9) NOT NULL AUTO_INCREMENT,
`user_mail` varchar(100) DEFAULT NULL,
`user_password` varchar(50) DEFAULT NULL,
`user_new_mail` varchar(100) DEFAULT NULL,
`user_new_mail_key` varchar(10) DEFAULT NULL,
`user_new_password` varchar(50) DEFAULT NULL,
`user_new_password_key` varchar(10) DEFAULT NULL,
`user_cle_activation` varchar(10) DEFAULT NULL,
`user_datetime` datetime NOT NULL,
`user_civilite` tinyint(4) DEFAULT NULL,
`user_prenom` varchar(50) DEFAULT NULL,
`user_nom` varchar(50) DEFAULT NULL,
`user_naissance` date DEFAULT NULL,
`user_telephone` varchar(20) DEFAULT NULL,
`user_mobile` varchar(20) DEFAULT NULL,
`user_adresse_1` varchar(100) DEFAULT NULL,
`user_adresse_2` varchar(100) DEFAULT NULL,
`user_code_postal` varchar(10) DEFAULT NULL,
`user_ville` varchar(100) DEFAULT NULL,
`user_pays` smallint(6) DEFAULT NULL,
`user_photo` varchar(50) DEFAULT NULL,
`user_cv` varchar(50) DEFAULT NULL,
`user_newsletters` tinyint(1) DEFAULT NULL,
`user_statut` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=794 ;
--
-- Contenu de la table `cnje_users`
--
INSERT INTO `cnje_users` (`user_id`, `user_mail`, `user_password`, `user_new_mail`, `user_new_mail_key`, `user_new_password`, `user_new_password_key`, `user_cle_activation`, `user_datetime`, `user_civilite`, `user_prenom`, `user_nom`, `user_naissance`, `user_telephone`, `user_mobile`, `user_adresse_1`, `user_adresse_2`, `user_code_postal`, `user_ville`, `user_pays`, `user_photo`, `user_cv`, `user_newsletters`, `user_statut`) VALUES
(2, '
[email protected]', '40f6b99491e4bc3fe36b1c73022ed73b', NULL, NULL, '40f6b99491e4bc3fe36b1c73022ed73b', 'zDhW6E8v', 'oqJKZCsI0b', '2010-03-12 20:05:53', 1, 'prenom', 'NOM', '2010-03-29', '01.48.74.24.81', '06.22.28.62.79', '5 rue de Maubeuge', '4ème étage', '75009', 'paris', 77, '2_20100312200553.jpg', 'cv_2_20100312201236.pdf', 1, 1),
(417, '
[email protected]', 'e19a815d2eb4b6e928c2a2fa8710f1c7', NULL, NULL, NULL, NULL, 'epeFh1wSd3', '0000-00-00 00:00:00', 1, 'prenom2', 'NOM2', '0000-00-00', '', '', '', '', '', '', 77, NULL, NULL, 1, 0),
(342, '
[email protected]', 'b30f172d16a82fd45c17c6d3d4b87673', NULL, NULL, 'b30f172d16a82fd45c17c6d3d4b87673', 'm5XTcugI', 'JkEn9txkQR', '2010-03-14 13:26:18', 1, 'Prénom3', 'NOM3', '0000-00-00', '', '', '', '', '', '', 77, NULL, 'cv_342_20100314144941.pdf', 1, 1),
(146, '
[email protected]', '14ce635ecc1163106ee3aacde217dae1', NULL, NULL, '14ce635ecc1163106ee3aacde217dae1', 'NSQgbYUR', 'YuZ16ImKjV', '2010-03-13 14:44:38', 3, 'Prénom4', 'NOM4', '1989-11-10', '', '', '', '', '', 'Paris', 77, '146_20100313144438.jpg', 'cv_146_20100313144849.pdf', 1, 1);
[/quote]
Voilà une requête qui devrait te permettre de créer les 5 tables nécessaires, ainsi que quelques données, qui créent un cas interdit.
Le cas interdit est le suivant :
L'utilisateur user_id = 417 de la table cnje_users est auditeur sur audit_id = 103 de la tables cnje_audits, car la liaison entre ces deux ID existe dans la table liaisons_audits_auditeurs.
De même, l'utilisareur user_id = 2 est auditeur sur audit_id = 96.
Or, l'audit_id 103 touche la je_id = 157, à laquelle appartient le user_id 2 (via la table cnje_postes, qui permet de lier un cnje_user avec une cnje_junior_entreprises.
Et l'audit_id 96 touche la je_id 137, à laquelle appartient le user_id 417.
Il s'agit donc d'un audit croisé : on audit pas la structure de l’une des personnes qui fait l’audit de notre structure.
Mon script PHP se présente comme ceci :
[php]<?php
$tables["users"] = $config["db_prefixe"]."users";
$tables["junior_entreprises"] = $config["db_prefixe"]."junior_entreprises";
$tables["audits"] = $config["db_prefixe"]."audits";
$tables["postes"] = $config["db_prefixe"]."postes";
$tables["liaisons_audits_auditeurs"] = $config["db_prefixe"]."liaisons_audits_auditeurs";
function get_array_from_query($sql, $debug = false) {
if($debug === true) echo "<p>".$sql."<p>";
$query = mysql_query($sql) or die(mysql_error());
$data = array();
while($result = mysql_fetch_assoc($query)) {
$data[] = $result;
}
return $data;
}
$audits = get_array_from_query(sprintf("SELECT audit_id, je_id
FROM ".$tables["audits"].", ".$tables["junior_entreprises"]."
WHERE audit_je_id = je_id AND audit_statut = 0 AND audit_session_id = '%d'
ORDER BY je_nid", $audits_session["session_id"]));
foreach($audits as $audit) {
$auditeurs_actuels = get_array_from_query(sprintf("SELECT user_id, CONCAT_WS(' ', user_prenom, user_nom) AS auditeur FROM ".$tables["users"].", ".$tables["audits"].", ".$tables["liaisons_audits_auditeurs"]." WHERE audit_session_id = '%d' AND audit_je_id = '%d' AND laa_auditeur_id = user_id AND laa_audit_id = audit_id", $audits_session["session_id"], $audit["je_id"]));
########################################
## GESTION DES ERREURS DE REPARTITION ##
########################################
//////////////////////////////////////////////////////////////
// Erreur 2 : Pas d'audit croisé // A FINIR
//////////////////////////////////////////////////////////////
foreach($auditeurs_actuels as $auditeur) {
/*
$audits_croises = get_value_from_query(sprintf("SELECT COUNT(POSTES_TARGETS.poste_user_id)
FROM ".$tables["junior_entreprises"].", ".$tables["postes"]." POSTES_AUDITEUR, ".$tables["postes"]." POSTES_TARGETS, ".$tables["liaisons_audits_auditeurs"].", ".$tables["audits"]."
WHERE POSTES_TARGETS.poste_je_id = '%d' AND POSTES_AUDITEUR.poste_je_id = audit_je_id AND audit_id = laa_audit_id AND laa_auditeur_id = POSTES_TARGETS.poste_user_id", $auditeur["user_id"]));
*/
// ICI, la requête qui devrait compter le nombre d'audit croisé pour l'auditeur en cours.
if($audits_croises > 0) {
// Il existe un audit croisé pour cet auditeur
}
}
}
?>[/php]
A priori, ça devrait te permettre de faire un test réel.