una roba del genere...
calcola che è già adattato, però testato e funzionante...
la form che deve contenere i campi si chiama myform... ovvio...
Codice PHP:
fai le query iniziali per prendere i dati poi:
<
script language="JavaScript" type="text/javascript">
function 
ListSelectValues(CONTROL){
var 
strTemp "";
for(var 
0;CONTROL.length;i++)
{
                if(
CONTROL.options[i].selected == true)
                                              {
                                                    
strTemp += CONTROL.options[i].value+",";
                                              }
                                              else
                                              {
                                                   
//strTemp += "0,";
                                                
}
                              }
return 
strTemp;
}

function 
popola()

{
          
document.myform.ComboFiglia.options.length 0
         yyy
=0
               
         
for(var i=0;i<Arr_Descrizione.length;i++)
         {
           
strconf=(''+Arr_Padre[i]+'');
        
strconf2="-"+ListSelectValues(myform.ComboPadre).split(",")[0]+"-";

            if ( (
ListSelectValues(myform.ComboPadre).indexOf(strconf)!=-1) || (strconf2=="--") )
            {
                
myform.ComboFiglia.options.length ++;

                
myform.ComboFiglia.options[yyy].value =""+Arr_Descrizione[i].split(",")[0]+"";
                
myform.ComboFiglia.options[yyy].text Arr_Descrizione[i].split(",")[1];
               
yyy ++;
            }
      }
}

                                    
</script> 
poi

per l'array padre:
Codice PHP:
<select id="ComboPadre" name="ComboPadre" onChange="popola();">
       <?php
do {  
?><option value="<?php echo $row_RecPadre['campo1']?>"><?php echo $row_RecPadre['campo1']?></option>
        <?php
} while ($row_RecPadre mysql_fetch_assoc($RecPadre));
  
$rows mysql_num_rows($RecPadre);
  if(
$rows 0) {
      
mysql_data_seek($RecPadre0);
      
$row_RecPadre mysql_fetch_assoc($RecPadre);
  }
?></select>         
<!--
                         Questi array JS memorizzano il primo la descrizione (identica a quella della select figlia)
                        e il secondo la chiave corrispondente al Padre. Penso che non sia la cosa più comoda del mondo ma funziona.
                        Usando forse un'array di classi apposite si può fare un lavoro migliore, più pulito.
                        Vanno dimensionati con il numero di record della combo figlia... in asp per esempio scriverei:
                        
                                   var Arr_Descrizione= new Array(<%=rsFiglio.recordcount%>);                                       
                                    var Arr_Padre= new Array(<%=rsFiglio.recordcount%>);
                        
                        dove rsFiglio è il recordset "figlio" (quello che popola la combo Figlio) e recordcount è
                        il metodo che restituisce il numero di record.            
   

-->                </td>
    <td width="250" align="left"><script language="JavaScript" type="text/javascript">
                                   var Arr_Descrizione= new Array(4);                                       
                                    var Arr_Padre= new Array(4);
                  </script>

                <select name="ComboFiglia">
<!-- Nota BENE: Per ogni record
       ci sarà un ciclo che popola prendendo il record dal db, okkay?
      
-->
poi l'array figlio:

Codice PHP:
<select name="ComboFiglia">

<?php
do {  
?>
                        <option value="<?php echo $row_RecFiglio['id']; ?>"><?php echo $row_RecFiglio['campo2']; ?>

                        <script language="JavaScript" type="text/javascript">
                           Arr_Descrizione[<?php echo $row_RecFiglio['id']; ?>]="<?php echo $row_RecFiglio['id']; ?>,<?php echo $row_RecFiglio['campo2']; ?>"; //formato: value,text
                                        Arr_Padre[<?php echo $row_RecFiglio['id']; ?>]="<?php echo $row_RecFiglio['id_combo']; ?>"; //il "padre". Gli ho detto che figlio1 fa parte del padre "1" ;)
                                    </script>


<?php
} while ($row_RecFiglio mysql_fetch_assoc($RecFiglio));
  
$rows mysql_num_rows($RecFiglio);
  if(
$rows 0) {
      
mysql_data_seek($RecFiglio0);
      
$row_RecFiglio mysql_fetch_assoc($RecFiglio);
  }
?>