Newsgroup: it.comp.www.php
Titolo: Tabella ragguppamento nomi

Volevo fare un db dove rilevo le altezze di alcune persone.
 
Ho due tabelle (e le semplifico cos�):
 
1) nomi -> id, nome
2) rilevazioni -> id, id_nome, data_rilevazione, altezza
 
Ora vorrei vedere in una tabella Tutti i nomi e le relative rilevazioni
e se non sono state inserite altezze si deve cmq vedere il nome, cos�
poi mi viene a mente di rilevarla)
 
Pensavo a 
 
SELECT nome, data_rilevazione, altezza FROM rilevazioni
RIGHT JOIN nomi
ON rilevazioni.id_nome = 
nomi.id
 
 
Ma se "Mario" viene rilevato molte volte la tabella diventa "brutta"
graficamente parlando
https://img.skitch.com/20120830-8b7eutnihh75drx18ycetdyb22.jpg
 
 
Come potrei scrivere Mario una volta sola?
 
...diciamo tipo cos�... 
https://img.skitch.com/20120830-cas9c4jdqed8n5xdbygcdtgetc.jpg
 
 

 
https://img.skitch.com/20120830-cas9c4jdqed8n5xdbygcdtgetc.jpg
 
 
 
In sql � giusto che venga replicato il nome, se ti interessa "stamparlo",
puoi fare un loop e stampi il nome SOLO a rottura.
 
<?php
$query = "SELECT nome, data_rilevazione, altezza FROM rilevazioni RIGHT
JOIN nomi ON rilevazioni.id_nome = 
nomi.id
"; 
 
$result = mysql_query($query) or die(mysql_error());
 
 
while($row = mysql_fetch_array($result)){
        if ($row['nome'] <> $nome_appoggio;
            echo $row['nome'];
            $nome_appoggio =  $row['nome'];
        end if;
	echo $row['data_rilevazione'];
	echo $row['altezza'];
	echo "<br />";
}
?>
 
Ciao
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 


Questa è una tecnica buona se il codice è davvero molto vicino a dove si 
stampa l'output.
Io per esperienza mia ho trovato che conviene crearsi degli array (o 
hashtables in questo caso) per poi essere più comodi a "sbobinarle" nel 
template:
esempio
 
while($row = mysql_fetch_array($result)){
  if(!isset($risultati[$row['nome']])){
   $risultati[$row['nome']] = array();
//questa riga si prende cura solo di una NOTICE, ma io odio le NOTICE :)
  }
  $risultati[$row['nome']][] =  array(
   'data'=>$row['data_rilevazione'],
   'altezza'=>$row['altezza'],
   );
}
 
Così poi puoi sbobinartelo comodamente in modi simili a
 
foreach ($risultati as $nome=>$valori){
  echo $nome;
  for($i = 0; $i < count($valori); $i++){
   echo $valori[$i]['data_rilevazione'];
   echo $valori[$i]['altezza'];
  }
}
 
M
-- 
I fatti mi cosano


Certamente la mia era solo teoria, certo poi dipende dal tipo di 
progetto e se si utilizzano particolari pattern di sviluppo.
 
la soluzione che ho adottato era per far capire la logica (ho preso 
l'esempio da 
php.net
 e adattato per la rottura del nome).
in ottica MVC anch'io utilizzo il tuo stesso approccio anche se esco con 
json (almeno è portabile in diversi approcci), è la view che si smazza 
di sbrotolare il json e utilizzarlo come meglio crede (view html o 
nativa mobile o output pdf ecc..).
 
Ciao
 
 


Assolutamente d'accordo
Di solito io becco il json tramite una $.get() e dentro faccio un 
$(data).each( .... );
Voleva essere un suggerimento per l'OP :)


Grazie mille a tutti e due  :)

 }
 
 
Ah ... avevo capito solo teoricamente  :(
 
Nel senso che se lo trasformo in tabella c'� qualcosa che non torna..
 
foreach ($risultati as $nome=>$valori)
{
  echo "<tr>" . 
        "<td>$nome</td>";
  for($i = 0; $i < count($valori); $i++)
  {
    echo"" .    
        "<td>"  . $valori[$i]['data'] . "</td>" .
        "<td>"  . $valori[$i]['altezza'] . "</td>" .
        "<td></td>" .
        "<td></td>" .
        "<td></td>" .
        "<td></td>" .
        "<td></td>" .
        "</tr>";
  }
}