Una query complicata da realizzare

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se non ho capito male:
se pinco ha scritto a sempronio (3 mess), sofonisba (8 mess) e pallino (2 mess) (tralasciamo provvisoriamente il chek) vorresti che saltasse fuori:

l'ultimo messaggio che:
pinco ha scritto a sempronio
pinco ha scritto a sofonisba
pinco ha scritto a pallino

è così?

p.s.
al posto di pinco ecc.. gli id
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova questo, però guarda che non l'ho testato, quindi ci possono essere errori di battitura, comunque eventualmente tolti non so se funzia
PHP:
<?php
require ('db/config.php');
$query_1 = "SELECT senderid FROM messages GROUP BY senderid"; 
$ris_1=mysql_query($query_1);
$senderid=array();
while($riga_1=mysql_fetch_array($ris_1)){ 
    $senderid[]=$riga_1['senderid'];
}
//abbino a quel senreid i suoi revicerid
$abbinamento=array();
//ciclo i senderid cercando l'abbinamento
foreach($senderid as $id_sen){
	//estraggo i reltivi valori dei revicerid
	$query_2="SELECT revicerid FROM messagese WHERE senderid=$id_sen GROUP BY revicerid";//da verificare se funzia
	$ris_2=mysql_query($query_2);
	while($riga_2=mysql_fetch_array($ris_2)){
		$abbinamento[$id_sen][]=$riga_2['revicerid'];//a ogni sender abbino i suoi rev
	}
}
//cilo abbinamento per trovare l'ultimo tempo
$ultimo=array();
foreach($senderid as $id_sen){
	foreach($abbinamento[$id_sen] as $id_rev){
		$query_3="SELECT time FROM messages WHERE senderid =$id_sen AND  revicerid=$id_rev ORDER BY time LIMIT 1";
		$ris_3=mysql_query($query_3);
		$riga_3=mysql_fetch_array($ris_3);
		$ultimo['$id_sen']['$id_rev']=$riga_3['time'];
	}
}
//proviamo ad estrarre i messaggi
foreach($ultimo as $id_sen => $valore){//$valore è un arrai $valore[revicerid] i cui valori sono gli ultimi tempi
//conviene verificare che $valore sia un array
	if(is_array($valore)){
		foreach($valore as $id_rev => $tempo){
			$query_4="SELECT * FROM messages WHERE senderid =$id_sen AND  revicerid=$id_rev AND time=$tempo";
			$ris_4=mysql_query($query_4);
			$riga_4=mysql_fetch_array($ris_4);
			$id=$riga_4['id'];
			$da=$riga_4['senderid'];
			$per=$riga_4['revicerid'];
			$messaggio=$riga_4['message'];
			$letto=$riga_4['check'];
			if($letto==0){
				$letto="<br />messaggio NON letto<br /><br />";
			}else{
				$letto="<br />messaggio letto<br /><br />";
			}
			$data=date("d-m-Y H:i:s",$riga_4['id']);
			//a questo punto (spero) di aver tirato fuori tutti i dati necessari
			echo "messaggio $id<br />";
			echo "inviato da $id per $per in data $data<br />"
			echo $messaggio;
			echo $letto;
		}
	}
}
?>
sappimi dire
 

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
No non va... no saprei dirti perche non va perche di questo codice ci ho capito poco (sono poco esperto)... !!!

P.S. non è "revicer" ma "reciver" :)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco ho trovato due errori
1.
correggi la riga
PHP:
$ultimo['$id_sen']['$id_rev']=$riga_3['time'];
togliendo gli apici a $ultimo
PHP:
$ultimo[$id_sen][$id_rev]=$riga_3['time'];

2.
correggi la riga
PHP:
$data=date("d-m-Y H:i:s",$riga_4['id']);
al posto di id metti time
PHP:
$data=date("d-m-Y H:i:s",$riga_4['time']);

ora fa qualcosa, ma non so se è quello che vuoi (dovrei avere la tabella messages con più dati)
comunque verifica e correggi i nomi dei campi nelle istruzioni $riga_xy['verifica_qui'] che devono essere uguali a qualli in tabella
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao, a parte l'ordine che non ho guardato:
la prima versione tirava fuori l'ultimo messaggio di pinco in assoluto indipendentemente a chi lo aveva inviato
l'ultimo messaggio di pinco
l'ultimo messaggio di asdrubale
ecc..

questo (dovrebbe) tirare fuori
l'ultimo messaggio di pinco inviato a pallo
l'ultimo messaggio di pinco inviato a pallino
l'ultimo messaggio di pinco inviato a sempronio
l'ultimo messaggio di asdrubale inviato a sofonisba
l'ultimo messaggio di asdrubale inviato a pallino
ecc....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
in una discussione simile è salatato fuori il problema del nome di un campo
tu usi come nome check, sembrerebbe, ma da verificare, che sia una parola riservata di mysql, prova a cambiare il nome nella tabella e nello script (es, chec) e prova a mettere dove ti servere l'order by
 
Discussioni simili
Autore Titolo Forum Risposte Data
A media degli elementi estratti da una query MySQL 0
S Selezionare ultimo record di una sotto query MySQL 27
V Query per una somma PHP 2
G Casella combinata in una query MS Access 4
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
M Ordinare una query join PHP 2
Tommy03 [PHP] Media valori presi da una query PHP 3
M [MySQL] CREARE UN LINK SU UN DETERMINATO CAMPO DI UNA TABELLA RISULTATO DI UNA QUERY SQL MySQL 3
P [MS ACCESS] Estrarre più somme da una query MS Access 4
G [PHP] Oracle, convertire una query multiline in Json PHP 3
A [PHP] Modifica caratteri di una query Oracle SQL PHP 0
G [PHP] inserire risultato di una query in una tabella PHP 3
napuleone [MySQL] commenti in una query MySQL 1
M [MS Access] Passare i dati di una query da form a report MS Access 3
simgia [PHP] Ciclare una query JOIN PHP 2
R [PHP] Estrapolare dati da una query left join PHP 0
MikSkagit [PHP] Risultato in una sola query PHP 16
U [PHP] estrarre i risultati di una query e visualizzarli in una tabella. PHP 9
trattorino [PHP] Unire a una query piu tabelle PHP 7
elpirata [PHP] Paginazione dati estratti da una query con più condizioni PHP 17
G [ASP] Risultato query in una variabile Classic ASP 2
D PHP:funzione che opera una query su argomento PHP 8
F Tabella con prima colonna con i risultati di una query PHP 1
G Problema con una query. PHP 5
A impostare una query con operatori condizionali MySQL 1
elpirata Stampare a video in echo table il risultato di una query PHP 4
M Comparare se un campo testuale è contenuto in un altro in una query MySQL 0
M Access-Query per creare una tabella con la data nel nome tabella MS Access 0
F Risultato di una query nell'array PHP 2
F paginazione record di una query Classic ASP 5
M Escludere dati da una query PHP 15
F PHP problema doppi apici all'interno di una query SQL PHP 1
D [risolto] Problemi di paginazione dei risultati con una determinata query Classic ASP 4
otto9due Piccolo aiutino per una query.. PHP 3
F Miglior metodo per contare le righe di una query MySQL 2
E Mettere come Selected l'opzione di un select option, tramite il dato di una query. Javascript 2
L Due query una sola while PHP 1
N Eseguire una query MySQL dopo 10 secondi PHP 0
D Stampare una query in una tabella MySQL 2
G condizioni if then else all interno di una query?? MySQL 2
xone Ordinare tramite menù a tendina i risultati di una query già stampati MySQL 0
A jbutton che esegue una query mysql in netbeans Java 1
K query per popolare una select tramite ajaxc php e xml ! Ajax 14
gandalf1959 [risolto] Mostrare a video il risultato di una query con stesso anno e mesi diversi PHP 13
G Inserimento loop in una INSERT query in PHP e MySQL PHP 2
Monital Divisione di una query e resto della divisione PHP 3
F explode in una query PHP 4
Albertoesse Problemi passaggio valori da un Form ad Una classe con query mysql PHP 12
R passare una variabile in query per ORDER BY PHP 6
D Ordinare i risultati di una query dalla fine della tabella MySQL 13

Discussioni simili