Salve a tutti

ho un problema con i dati di una tabella che devo ordinare in modo un po' strano: questa è la tabella:
codice:
CREATE TABLE dir_cat (
  cat_id int(11) NOT NULL auto_increment,
  titolo varchar(50) NOT NULL default '',
  up_cat int(11) NOT NULL default '0',
  PRIMARY KEY  (cat_id)
) TYPE=MyISAM;
Questi sono i valori ad esempio:
codice:
cat_id | titolo   | up_cat
   1   | Musica   |   0
   2   | Film     |   0
   3   | Sport    |   0
   4   | Calcio   |   3
   5   | Tennis   |   3
   6   | Basket   |   3
   7   | Internet |   0
   8   | Rock     |   1
   9   | Blues    |   1
Il principio è quello per cui le voci che hanno up_cat = 0 sono categorie principali, le altre sono sottocategorie della categoria con cat_id = up_cat

Vorrei che venissero ordinate le voci in modo da ottenere ogni categoria con subio sotto le sue sottocategorie, ottenendo ad esempio questo risultato:
codice:
cat_id | titolo   | up_cat
   1   | Musica   |   0
   8   | Rock     |   1
   9   | Blues    |   1
   2   | Film     |   0
   3   | Sport    |   0
   4   | Calcio   |   3
   5   | Tennis   |   3
   6   | Basket   |   3
   7   | Internet |   0
Nel caso non sia possibile, come mi consigliereste di ri-strutturare la tabella per ottenere quel risultato?

vi prego rispondetemi perché ci ho messo mezzora a scrivere sto messaggio..

CIAU