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 :
[fusion_builder_container hundred_percent= »yes » overflow= »visible »][fusion_builder_row][fusion_builder_column type= »1_1″ background_position= »left top » background_color= » » border_size= » » border_color= » » border_style= »solid » spacing= »yes » background_image= » » background_repeat= »no-repeat » padding= » » margin_top= »0px » margin_bottom= »0px » class= » » id= » » animation_type= » » animation_speed= »0.3″ animation_direction= »left » hide_on_mobile= »no » center_content= »no » min_height= »none »][php]
<?php
/************************************************************************/
/* Script rélisé par Johan VIVIEN (Hotfirenet)
/* Fini le 24 octobre 2008
/* [email protected]
/* =======================================================================
/*
/* 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&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 "<br/>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].’ : &agrave; ‘ . $tabFinal[‘msgTo’][$j] . ‘ message(s) re&ccedil;u et &agrave; ‘. $tabFinal[‘msgFrom’][$j] . ‘ archiv&eacute;(s)<br />’;
echo ‘Total de message pour ‘.$tabFinal[‘uname’][$j].’ : <b>’ . $tabFinal[‘total’][$j] . ‘</b></p><hr />’;
}
?>
</p>
</body>
</html>
[/php]
Merci Oim pour ce petit exercice, bien sympa 😉 ….[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]