par
AB » 10 juin 2009, 15:03
Ci cependant il me faut remettre comme avant, il faut que je crée une petite partie d'insertion dans la table departements par exemple dans chacune de mes pages "?id=xx", c'est une bonne idée aussi mais cela implique de bien mettre à jour la bdd, et ça je ne sais pas si cela sera fait sur le long terme (stage inside)...
Si tu veux renseigner le nombre de clients dans ta table "départements", à la suite de ta requête d'insertion il suffit de faire :
//...
if (get_magic_quotes_gpc()) $_POST = array_map('stripslashes',$_POST);
$_POST = array_map('mysql_real_escape_string',$_POST);
$sql = "INSERT INTO informations(Entreprise, Num_Dep, Nom_Maintenance, Num_Maintenance, Nom_Travaux, Num_Travaux, Adresse) VALUES('".$_POST['Entreprise']."', '".$_POST['Num_Dep']."', '".$_POST['Nom_Maintenance']."','".$_POST['Num_Maintenance']."', '".$_POST['Nom_Travaux']."','".$_POST['Num_Travaux']."', '".$_POST['Adresse']."')";
if (mysql_query($sql)) {
// Mise à jour nb_client dans table "departements"
$verif_nb_client = "SELECT COUNT(*) as nbc FROM informations WHERE Num_Dep = '".$_POST['Num_Dep']."'";
$req_verif_nb_client = mysql_query($verif_nb_client);
$nb_client = mysql_fetch_assoc($req_verif_nb_client);
$update_nb_client = "UPDATE departements SET Nb_Clients = '".$nb_client['nbc']."' WHERE Num_Dep = '".$_POST['Num_Dep']."'";
mysql_query($update_nb_client);
};
Evidemment il faudra mettre le bloc de code //Mise à jour nb_client dans table "departements", de la même manière lorsque tu feras une suppression dans ta table "informations"
Si tu fais cela tu pourras reprendre ta petite requête simple (sans jointure) pour les informations de tes infobulles.
Il te resterait le cas où quelqu'un rentrerait des informations dans la table "informations" sans passer par ton module d'administration, depuis phpmyadmin par exemple. Pour ce cas particulier, tu pourrais faire une page "Actualiser le nombre de clients" en te servant du dernier code que tu as créé
$query = "SELECT
departements.Num_Dep,
COUNT(informations.Num_Dep) AS nombre_Dep
FROM departements
LEFT JOIN informations
ON departements.Num_Dep=informations.Num_Dep
GROUP BY departements.Num_Dep";
$ressource = mysql_query($query) or die(mysql_error());
$nb_lient_dep = array();
while ($resultat = mysql_fetch_assoc($ressource))
{
$nb_lient_dep[$resultat['Num_Dep']] = $resultat['nombre_Dep'];
}
foreach ($nb_lient_dep as $key => $value)
{
$maj = "UPDATE departements SET Nb_Clients = '".$value."' WHERE Num_Dep = '".$key."'";
mysql_query($maj);
}
Donc cette page ne serait utilisée qu'occasionnellement sur demande, au cas où... et le code d'affichage de ta carte serait optimisé.
Enfin bon si le nb de clients est de l'ordre de la dizaine par département, tu peux laisser la jointure pour l'affichage des infobulles de ta carte. Par contre si c'est de l'ordre de la centaine ou plus, ta table "informations" pourra contenir plusieurs dizaines de milliers de lignes et dans ce cas la différence pourra être sensible d'autant plus qu'il y aura des connexions simultanées à ta page "carte".
[quote="toone"]Ci cependant il me faut remettre comme avant, il faut que je crée une petite partie d'insertion dans la table departements par exemple dans chacune de mes pages "?id=xx", c'est une bonne idée aussi mais cela implique de bien mettre à jour la bdd, et ça je ne sais pas si cela sera fait sur le long terme (stage inside)...[/quote]
Si tu veux renseigner le nombre de clients dans ta table "départements", à la suite de ta requête d'insertion il suffit de faire :
[php]//...
if (get_magic_quotes_gpc()) $_POST = array_map('stripslashes',$_POST);
$_POST = array_map('mysql_real_escape_string',$_POST);
$sql = "INSERT INTO informations(Entreprise, Num_Dep, Nom_Maintenance, Num_Maintenance, Nom_Travaux, Num_Travaux, Adresse) VALUES('".$_POST['Entreprise']."', '".$_POST['Num_Dep']."', '".$_POST['Nom_Maintenance']."','".$_POST['Num_Maintenance']."', '".$_POST['Nom_Travaux']."','".$_POST['Num_Travaux']."', '".$_POST['Adresse']."')";
if (mysql_query($sql)) {
// Mise à jour nb_client dans table "departements"
$verif_nb_client = "SELECT COUNT(*) as nbc FROM informations WHERE Num_Dep = '".$_POST['Num_Dep']."'";
$req_verif_nb_client = mysql_query($verif_nb_client);
$nb_client = mysql_fetch_assoc($req_verif_nb_client);
$update_nb_client = "UPDATE departements SET Nb_Clients = '".$nb_client['nbc']."' WHERE Num_Dep = '".$_POST['Num_Dep']."'";
mysql_query($update_nb_client);
};[/php]
Evidemment il faudra mettre le bloc de code //Mise à jour nb_client dans table "departements", de la même manière lorsque tu feras une suppression dans ta table "informations"
Si tu fais cela tu pourras reprendre ta petite requête simple (sans jointure) pour les informations de tes infobulles.
Il te resterait le cas où quelqu'un rentrerait des informations dans la table "informations" sans passer par ton module d'administration, depuis phpmyadmin par exemple. Pour ce cas particulier, tu pourrais faire une page "Actualiser le nombre de clients" en te servant du dernier code que tu as créé
[php]$query = "SELECT
departements.Num_Dep,
COUNT(informations.Num_Dep) AS nombre_Dep
FROM departements
LEFT JOIN informations
ON departements.Num_Dep=informations.Num_Dep
GROUP BY departements.Num_Dep";
$ressource = mysql_query($query) or die(mysql_error());
$nb_lient_dep = array();
while ($resultat = mysql_fetch_assoc($ressource))
{
$nb_lient_dep[$resultat['Num_Dep']] = $resultat['nombre_Dep'];
}
foreach ($nb_lient_dep as $key => $value)
{
$maj = "UPDATE departements SET Nb_Clients = '".$value."' WHERE Num_Dep = '".$key."'";
mysql_query($maj);
}[/php]
Donc cette page ne serait utilisée qu'occasionnellement sur demande, au cas où... et le code d'affichage de ta carte serait optimisé.
Enfin bon si le nb de clients est de l'ordre de la dizaine par département, tu peux laisser la jointure pour l'affichage des infobulles de ta carte. Par contre si c'est de l'ordre de la centaine ou plus, ta table "informations" pourra contenir plusieurs dizaines de milliers de lignes et dans ce cas la différence pourra être sensible d'autant plus qu'il y aura des connexions simultanées à ta page "carte".