Salut,
timo a écrit :
j'aimerais que si un libelle a plusieur identifiant alors pour chaque libelle en enregistre autant d'identifiant
exemple: frais identifiant
salaire 11111
salaire 232222
salaire 54445
Ce qui ne respecte pas les
règles de normalisation.
En toute logique il te faudrait 2 tables :
frais
* id_frais
* libelle_frais
frais_ids
* id_identifiant
* id_frais
* valeur_identifiant
Ce qui pourrait donner :
--
-- Structure de la table `frais`
--
CREATE TABLE `frais` (
`id_frais` int(10) unsigned NOT NULL auto_increment,
`libelle_frais` text NOT NULL,
PRIMARY KEY (`id_frais`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Structure de la table `frais_ids`
--
CREATE TABLE `frais_ids` (
`id_identifiant` int(10) unsigned NOT NULL auto_increment,
`id_frais` int(10) unsigned NOT NULL,
`valeur_identifiant` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_identifiant`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
require_once('connexion.inc.php'); // Connexion à la base
// Lecture du fichier dans un tableau
$fichier = "test.csv";
$array_contenu = file($fichier);
for($i = 1; $i < count($array_contenu); $i++) { // on commence à 1 pour ne pas prendre l'entête (frais)
$ligne = explode(';', $array_contenu[$i]);
$frais = ucwords(trim($ligne[0])); // libellé du frais
// Récupération id_frais si ce frais existe déjà
$sql = sprintf("Select id_frais From frais Where libelle_frais = '%s'",
mysql_real_escape_string($frais));
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0) { // Ce frais existe déjà
echo '<p>Le frais <strong>'.$frais.'</strong> existe déjà.</p>';
$id_frais = mysql_result($result, 0);
} else { // sinon on le crée
$sql = sprintf("Insert into frais set libelle_frais = '%s'",
mysql_real_escape_string($frais));
mysql_query($sql);
$id_frais = mysql_insert_id(); // Résupération du dernier id_frais créé
echo '<p>Le frais <strong>'.$frais.'</strong> a été créé.</p>';
}
// Ecriture des identifiants
for($j = 1; $j < count($ligne); $j++) { // on commence à 1 pour ne pas prendre le libellé du frais
$identifiant = intval($ligne[$j]);
if($identifiant > 0) {
// On vérifie que cet identifiant n'existe pas déjà
$sql = sprintf("Select libelle_frais From frais_ids Natural Join frais Where valeur_identifiant = '%s'",
mysql_real_escape_string($identifiant));
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0) { // Cet identifiant existe déjà
echo '<p>-> L\'identifiant <strong>'.$identifiant.'</strong> existe déjà pour le frais <strong>'.mysql_result($result, 0).'</strong>.</p>';
} else { // Sinon on le crée
$sql = sprintf("Insert into frais_ids set id_frais = $id_frais, valeur_identifiant = '%s'",
mysql_real_escape_string($identifiant));
mysql_query($sql);
echo '<p>-> L\'identifiant <strong>'.$identifiant.'</strong> a été créé pour le frais <strong>'.$frais.'</strong>.</p>';
}
}
}
echo '<hr />';
}
echo '<p>Traitement terminé !</p>';
Modifié par Heyoan (02 Mar 2010 - 03:36)