Yo hice algo así con Javascript + PHP + Mysql. (con jQuery por comodidad)
Pero no me acuerdo muy bien y no se donde quedó el código...
Lo que hacía era añadir un campo a los mensajes para marcarlo como leído, y otro para marcar como notificación leída.
Entonces cuando llegaba un mensaje, siempre se insertaba como no leído (0) y la notificación en 0, cuando la notificación era 1, entonces ya había visto la notificación, y cuando el status del mensaje era 1, se marcaba como leído
Código Javascript
:
Ver original//Ejecutar la funcion cada 5 segundos
setInterval("checkMsj()",5000);
function checkMsj(){
$.ajax({
async:false,
url:"php/checkMsj.php",
success:function(resultado){ $("#div").html(resultado); }
});
}
//Marcar la notificacion como leída
function setRead(){
$.ajax({
async:false,
url:"php/setReaded.php",
success:function(){ $("#div").html(""); }
});
}
php/checkMsj.php :
Código PHP:
Ver original<?php
$user = $_SESSION['user'];
$cnx = new mysqli("host","user","pass","db");
$c = $cnx->query("SELECT * FROM mensajes WHERE statusNotif = '0' AND destinatario = '".$user."'");
$cantidadMsjNuevos = $c->num_rows;
if($cantidadMsjNuevos != 0){
?>
<sctipt type="text/javascript">
$("#notif").html("Tienes <?php echo $cantidadMsjNuevos; ?> mensajes nuevos");
</script>
<?php
}
?>
php/setReaded.php
Código PHP:
Ver original<?php
$user = $_SESSION['user'];
$cnx = new mysqli("host","user","pass","db");
$c = $cnx->query("UPDATE mensajes SET statusNotif = '1' WHERE destinatario = '".$user."' AND statusNotif = '0' ");
?>
Y así para mostrar el mensaje y marcarlo como leído, en diferentes scripts.