select count php ajax

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
Ciao a tutti,
premetto che ajax l'ho cominciato a studiare da pochissimo e non ci capisco ancora molto, quello che chiedo è un esempio di stampa in real-time.

Ho un db mysql e una tabella con i seguenti campi: id, msg, data, letto. (letto verifica se il msg è stato letto o no 0/1)

la query sarà "SELECT count(*) AS tot_msg FROM tabella WHERE letto=0 ORDER BY data DESC"

qualcuno potrebbe farmi un esempio su come stampare il numero totale di messaggi non letti dentro un div?
 

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
P.S. L'order by non c'entra niente mi sono sbagliato, comunque io ho provato una cosa del genere, ma non funziona in real-time, devo ricaricare per forza la pagina.

index.php
Codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>titolo</title>
<script type="text/javascript">
var myRequest = null;
var the_box = null;

function CreateXmlHttpReq(handler) {
 	var xmlhttp = null;
	try {
    	xmlhttp = new XMLHttpRequest();
  	}catch(e){
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}

function aggiornamento() {
	e = document.getElementById(the_box);
    if (myRequest.readyState == 4 && myRequest.status == 200) {
        e.innerHTML = myRequest.responseText;
    }
}

function prova(url,id_box) {
	the_box = id_box;
	 var r = Math.random();
	if(url.indexOf("?")==-1)
		url = url + "?rand="+escape(r);
	else
		url = url + "&rand="+escape(r);
   
    myRequest = CreateXmlHttpReq(aggiornamento);
    myRequest.open("GET",url);
    myRequest.send(null);
}
</script>
</head>
<body>
<div id="box"></div>
<script type="text/javascript">prova('query.php','box');</script>
</body>
</html>

query.php
PHP:
<?php
require 'files/config.php';
$res=mysql_query("SELECT count(id) as tot_msg FROM tabella WHERE letto=0");
$result = mysql_fetch_array($res);
$tot=$result['tot_msg'];
						
echo $tot;
?>
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, puoi utilizzare la funzione setInterval() per richiamare la funzione ogni tot secodni
Codice:
setInterval(function(){
     prova('query.php','box');
},1000); // ogni secondo
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Di nulla, calcola però che in questo modo, finchè la pagina è aperta, esegui una query sul database ogni secondo e se gli utenti che hanno aperto la stessa pagina sono 50 eseguirai 50 query ogni secondo, stressando notevolmente il database.
calcola se ne vale la pena
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Io lo farei aggiornare solo al bisogno con un immagine o un button
HTML:
<input type="button" onclick="prova('query.php','box');" value="aggiorna"/>
edit:
50 query al secondo cmq non sono molte per un database relazionale, dovresti calcolarti quanti utenti e per quanto tempo accedono a quella pagina
 
Ultima modifica:

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
Beh ti spiego, il codice che avevo scritto era solo un esempio, in realtà quello che sto cercando di fare è un'icona posta in alto (in qualsiasi pagina del sito, tramite un include) che segnala se ci sono notifiche, quindi sarà visibile appunto su ogni pagina.
Ad esempio su Fb le notifiche appaiono subito senza ricaricare pagina, ci saranno milioni di utenti connessi contemporaneamente su Fb, vengono eseguite milioni di query al secondo? Non credo..
Cosa potrei fare?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
vengono eseguite milioni di query al secondo?
credo proprio di si
metti 10 secondi e indicizza bene la tabella, non dovresti avere problemi
 

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
Grazie mille, per quanto riguarda l'indicizzazione della tabella io ho: id(int) , destinatario(varchar 50), msg(varchar 150) e data(timestamp). (letto sto pensando di eliminarlo perché se leggono le notifiche le elimino dal db direttamente)

Dato che si tratta di piccole cifre mi basta usare INDEX?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Visto che la query va a contare gli'id
Codice:
SELECT count(id) as tot_msg
metti un indice sul campo id, risparmi un bel po di microsecondi ( ho appena provato )
mi pare che la sintassi sia questa
Codice:
ALTER TABLE tabella ADD INDEX ( campo )
altrime in phpmyadmin c'è l'icona per aggiungere un indice
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Facebook credo che abbia un altro metodo che è molto più efficace in quei casi.
Non l'ho mai testato ma so che esiste; si basa sul design pattern MVC:
Di solito è il controller che va a prendere i dati dal model e li da in pasto alla view dopo delle modifiche ma in alcuni casi (come ad esempio nel caso dell'Observer) viene sfruttato il legame lasco che va dal model alla view che invia ad essa una notifica che indica un cambiamento nel model stesso e quindi la view si attiva (con l'aiuto del controller) a visualizzare il dato aggiornato.
Tutto questo è riassunto da quest'immagine che descrive il design pattern MVC:
pattern-mvc-fig2.gif
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Estrarre valore con SELECT COUNT PHP 0
G [risolto] MySql, SELECT, GROUP BY e COUNT MySQL 6
Monital Select count in array PHP 23
A RecordCount e Select Count Classic ASP 2
C select count PHP 2
L Ripetere Campi disabilitando input in riferimento ad un valore della select jQuery 0
otto9due Ordinare option di una select Javascript 5
W MySQL ciclo in SELECT MySQL 0
W MySQL SELECT list dinamica MySQL 0
M Select Option dentro una Table jQuery 2
G Colorare menu select attraverso ricerca php PHP 0
L problema con query select PHP 2
F menù select dinamico da db in php PHP 3
D popolare campi tra th alla select PHP 36
M Creare un campo input select quantità di un numero intero prelevato dal db PHP 3
L Select Dinamiche...da txt? PHP 3
E Php select option e ajax PHP 23
R Select concatenata che non funziona la seconda volta Ajax 3
L select join e sottrazione punti PHP 13
L input dati con inser into select ? PHP 4
V hierarchy-select jQuery 0
Emix Select concatenate php sql ajax PHP 2
F query e form con select multipla PHP 17
T recupero valori select multipla da android Javascript 3
J php, scegliere autista da select e mostrare se ha fatto un incidente PHP 8
Tommy03 Select in ordine per numero di record MySQL 7
T problema con select dinamica con jquery Javascript 0
J Far comparire e scomparire un div con un select Javascript 1
M Opzioni select da 1 a 200 PHP 0
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
C input in sostituzione della select PHP 2
G Insert into select - Aiuto MySQL 0
max1974 autocomplete trigger select jQuery 0
X [Select] Valori chiave non presenti in un'altra tabella MySQL 2
M Estrarre dati da una select HTML PHP 3
MarcoGrazia jquery validate, necessità di validare almeno un elemento select su due jQuery 1
T [PHP] Autocompilazione input multiple da una select PHP 1
Alex_70 [PHP] Visualizzare foto tramite select PHP 0
S [PHP] aggiornamento table tramite select senza ricaricare la pagina PHP 5
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
M [PHP] Problema con query select PHP 2
C [PHP] Controllo <select> comportamento anomalo PHP 2
G [PHP] Select con opzioni dipendenti da un'altra select PHP 3
L [Javascript] Select option in campi input Javascript 4
M [PHP] Problemi con select PHP 6
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
S [ASP] SALVARE VALORE SELECT OPTION SU CAMPO TABELLA ACCESS Classic ASP 9
max1974 [Javascript] malfunzionamento select Javascript 0
M [PHP] Drop down in campo select PHP 1
D [PHP] Select dinamici PHP 2

Discussioni simili