Newsgroup: it.comp.www.php
Titolo: Raggruppare link per categorie

Ho la necessità di visualizzare una serie di link raggruppati per categoria.
I link, con la relativa descrizione sono memorizzati in una tabella di un
database MySQL. Ogni link contiene anche la categoria a cui appartiene.
Vorrei visualizzare ogni gruppo di link, con intestazione della categoria
come primo elemento del gruppo.
Qualcuno ha mai affrontato il problema?
Francesco

 ha scritto nel messaggio
news:BS3Aa.244555$K35.5...@news2.tin.it...



Si sei stato molto chiaro, ed anzi, hai avuto la mia stessa idea. Anche io
avevo intenzione di applicare questa soluzione, quello che mi ha bloccato,
perň, č stato un discorso sulla efficienza di questa soluzione. Ovvero,
anche a me sembra la piů semplice, ma č anche veloce? Nel senso che, poichč
io dovrei eseguire queste due query per ogni utente che si collega alla
pagina, credevo che si potesse rallentare in qualch modo il server, anche se
poi le tablle con i link non sono molto grandi.
Francesco

 ha scritto nel messaggio
news:oOnAa.251544$K35.6...@news2.tin.it...


 }
Con una roba di questo tipo (due tabelle) personalmente farei un'unica 
query su tutte e due le tabelle, azzardo un po' di codice, e chiedo ai 
GURU del gruppo di valutare l'approccio:
$query = "select CONCAT('<br><strong>',c.categoria,'</strong><br>') as 
categoria, CONCAT('&nbsp;&nbsp;&nbsp;',s.sitonome,'<br>') as sito from 
categoriesiti as c, siti as s where c.indice=s.sitocategoria order by 
c.indice asc, s.sitonome asc";
$datidb = mysql_query($query,$connessione);
$categ="";
while ($dati = mysql_fetch_assoc($datidb))
	{
	if ($categ != $dati["categoria"])
		{
		$categ = $dati["categoria"];
		echo $categ;
		}
	echo $dati["sito"];
	}
dove "siti" e "categoriesiti" sono, nel mio caso, due tabelle separate, 
c.indice e' la chiave primaria di categoriesiti e categoria č una 
stringa, e sitonome č una stringa (nome del sito of course :-) e 
categoria e' una chiave esterna di "siti" al campo "indice" di 
categoriesiti:
Dal basso della mia (relativa pero' :-) niubbiagine di PHP/MySql mi 
piacerebbe sapere se e come si puo' ottimizzare o se c'e' un approccio 
diverso e piu' performante... onestamente se potessi evitare quell'if() 
sarei piu' contento, ma non saprei come modificare la query.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
Per rispondere: togli il PUNTO e metti un .


Ecco la modifica che ho fatto al tuo script:
$cat=mysql_query("SELECT categoria FROM $tab_categorie where categoria
!='Mappe'order by categoria");
while ($categoria=mysql_fetch_array($cat))
{
$array_categoria[]=$categoria["categoria"];
}
foreach($array_categoria as $chiave=>$val)
{
$conta_link=mysql_query("Select count(*) as Conta FROM $tabella WHERE
Categoria like '$val'");
$dati_link=mysql_query("SELECT * FROM $tabella WHERE Categoria like '$val'
order by descrizione");
$conta=mysql_fetch_array($conta_link);
if ($conta[0]>0)
{
echo "<tr>";
echo "<td><b>".$val."</td></b>";
echo "<td></td>";
echo "</tr>";
while ($link=mysql_fetch_array($dati_link))
{
$descrizione=$link["Descrizione"];
$url=$link["Link"];
echo "<tr>";
echo "<td><a href=".$url.">".$descrizione."</a></td>";
echo "</tr>";
}
}
}