Una query complicata da realizzare

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
 
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
 
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" :)
 
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
 
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....
 
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