Codice PHP:
<?php
// Esegui la query
$sql "SELECT categorie.id AS cat_id,
               categoria,
               sottocategorie.id AS sottocat_id,
               sottocategoria
        FROM categorie
        LEFT JOIN sottocategorie
        ON categorie.id = sottocategorie.id_categoria"
;

$result mysql_query($sql);

// Crei un array in cui mettere la struttura dei dati
// che dopo stamperai - $data e' un array multidimensionale
// puoi vedere la struttura mettendo un print_r($data)
// dopo il while()
$data = array();

while ( 
$record mysql_fetch_assoc($result) ) {

    
// gli indici principali sono i nomi delle categorie
    // il primo elemento e' l'id
    
$data[$record['categoria']]['id'] = $record['cat_id'];

    
// se ci sono sottocategorie, crei un altro array e lo
    // aggiungi al principale
    
if ( !empty($record['sottocat_id']) ) {
        
$temp = array(
            
'id'   => $record['sottocat_id'],
            
'nome' => $record['sottocategoria'],
        );
        
$data[$record['categoria']]['sottocategorie'][] = $temp;
    }
}
?>


<ul>
<?php foreach ( $data as $key => $val ): ?>
    [*]
        [<?php echo $val['id']; ?><?php echo $key?>
        <?php if ( isset($val['sottocategorie']) ): ?>
        <ul>
        <?php foreach ( $val['sottocategorie'] as $sottocategoria ): ?>
            [*][<?php echo $sottocategoria['id']; ?><?php echo $sottocategoria['nome']; ?>
        <?php endforeach; ?>
        [/list]
        <?php endif; ?>
    
<?php endforeach; ?>[/list]