NPDS – Connaitre le nombre de MI par membre

Dimanche 26 octobre, 2008 at 10:30 / 0 comment

Npds

Voici la problématique, Oim m’a demandé un peu d’aide pour un module de gestion de la messagerie interne qu’il réalise pour NPDS.

Cette messagerie est relativement consommatrice en terme de stockage de ces messages interne, surtout lorsque l’on approche les 6000 membres.

Le but de ce script est de savoir donc le nombre de message archivés par le membre, et le nombre de message qu’il a reçu, puis de faire un des messages et de les classer par ordre décroissant.

Ce script utilise des fonctions PHP, tel que: array, arsort, reset, key, next …

Voici le résultat :

<?php
/************************************************************************/
/* Script rélisé par Johan VIVIEN (Hotfirenet)
/* Fini le 24 octobre 2008
/* hotfirenet@gmail.com
/* =======================================================================
/*
/* Ce script permet de connaitre le nombre de message archivé et reçu par membre
/* Sur une idee de Oim ...
/*
/* This program is free software. You can redistribute it and/or modify
/* it under the terms of the GNU General Public License as published by
/* the Free Software Foundation; either version 2 of the License.
/************************************************************************/
$connect = mysql_connect('localhost', 'root', '');
$selectDB = mysql_select_db('lansou', $connect);

$nbreq = 0;

function sql_query($sql) {
	global $nbreq;

	$execQuery = mysql_query($sql);
	$nbreq++;

	return ($execQuery);
}

?>
<html>
    <head>
	<style>
	.rouge {
		color: #ff0000;
	}
	</style>
    </head>
    <body>
<?php
//On execute la requete, puis on rempli un tableau assossiatif en utilisant comme index l'id
$selectNbMsgFrom = 'SELECT to_userid, COUNT(*)
					FROM priv_msgs
					WHERE  type_msg = 0
					GROUP BY (to_userid)';
$execNbMsgFrom = sql_query($selectNbMsgFrom);
$tabNbMsgFrom = array();
while($resultNbMsgFrom = mysql_fetch_row($execNbMsgFrom)) {
	$tabNbMsgFrom[$resultNbMsgFrom[0]] = $resultNbMsgFrom[1];
}

//Pareil que plus au mais pour connaitre le nombre de message envoy&amp;eacute;
$selectNbMsgTo = 'SELECT from_userid, COUNT(*)
				  FROM priv_msgs
				  WHERE  type_msg = 1
				  GROUP BY (from_userid)';
$execNbMsgTo = sql_query($selectNbMsgTo);
$tabNbMsgTo = array();
while($resultNbMsgTo = mysql_fetch_row($execNbMsgTo)) {
	$tabNbMsgTo[$resultNbMsgTo[0]] = $resultNbMsgTo[1];
}
//Je liste les membres j'associe l'ui en index et le name en valeur
$selectMembre = sql_query('SELECT uid, uname FROM users');
$tabListeMembre = array();
while($listeMembre = mysql_fetch_row($selectMembre)) {
	$tabListeMembre[$listeMembre[0]] = $listeMembre[1];
}

echo "&lt;br/&gt;nous faisons pour ce resultat $nbreq requetes<br /><br />";

//Je defini mon tableau et ma variable $i a 0
$tabFinal = array();
$i = 0;
// je commence ma boucle, et je creer un tableau avec mes valeurs
foreach($tabListeMembre as $idMembres => $nomMembres) {
	$total = $tabNbMsgTo[$idMembres] + $tabNbMsgFrom[$idMembres];
	//Si le membre n'a aucun message je passe son tour
	if($total == 0)
		continue;

		//je rempli mon tableau
		$i++;
		$tabFinal['uname'][$i] = $nomMembres;
		$tabFinal['msgFrom'][$i] = $tabNbMsgFrom[$idMembres];
		$tabFinal['msgTo'][$i] = $tabNbMsgTo[$idMembres];
		$tabFinal['total'][$i] = $total;
}

//faisont un tri sur letableau
arsort($tabFinal['total']);

//Maintenant que j'ai realiser tous mes traitements, j'affiche mon tableau en tenant compte de la colonne total en utilisant comme clé cette colonne ...
for(reset($tabFinal['total']); $j = key($tabFinal['total']); next($tabFinal['total'])) {
	$class = $tabFinal['total'][$j] >= 20 ? ' class="rouge"' : '';

	echo '<p '.$class.'>'.$tabFinal['uname'][$j].' : &amp;agrave; ' . $tabFinal['msgTo'][$j] . ' message(s) re&amp;ccedil;u et &amp;agrave; '. $tabFinal['msgFrom'][$j] . ' archiv&amp;eacute;(s)&lt;br /&gt;';
	echo 'Total de message pour '.$tabFinal['uname'][$j].' : <b>' . $tabFinal['total'][$j] . '</b></p><hr />';
}

?>
</p>
</body>
</html>

Merci Oim pour ce petit exercice, bien sympa ;) ….

Tags: , ,

There are no comments yet, add one below.

Leave a Comment


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>