yo la realize, para 3 combos. Cada q sucede un evento onChange mando a llamar a una funcion para recargar y cargar los nuevos valores, let's see....
 
Los datos son extraidos de una tabla categorias q contiene las categorias y subcategorias:
# Estructura de tabla para tabla `categoria`
CREATE TABLE categoria (
  id int(4) unsigned NOT NULL auto_increment,  
  nombre varchar(50) default NULL,
  nivel int(3) unsigned default '0',
  relacion int(3) unsigned default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;  
el 
id, pues es el id de la categoria; 
nombre, el nombre de la categoria; 
nivel, a q nivel pertenece, o sea si carga dentro del primer select o el segundo o el ultimo; 
relacion almacena el id de la categoria con la q esta relacionado esta subcategoria (para el caso de las categorias de nivel 1 no tienen relacion, obviamente), supongo esta claro; bueno hasta ahi la BD.
Procedan a cargar la BD con unos cuantos datos, .... 
VAMOS AL SCRIPT 
 Código PHP:
    <?
include("funciones.php");
$link=conecBD();
echo '
<table width="90%" border="0" cellspacing="0" cellpadding="0">
  <form name="mx" method="post">
  <tr align="center"><td width="33%"> 
  <!------ Primer Select  (s1) ---->
  <input name="is1" type="hidden" value="',$is1,'">
  <select name="s1" id="select1" class="prod" onChange="recarga(this.form);">';
$consulta=mysql_query("SELECT nombre, id FROM categoria WHERE nivel=1",$link);
if ($row=mysql_fetch_array($consulta))
{ echo '<option value="0" selected>Elija...</option>';
  do   echo '<option value="',$row["id"],'">',$row["nombre"],'</option>';
  while ($row=mysql_fetch_array($consulta));
  mysql_free_result($consulta);
}
else echo '<option value="0" selected>No hay categorias def.</option>';
echo '
              </select>
            </td>
            <td width="34%"> 
              <!------ Segundo Select (s2)---->
              <input name="is2" type="hidden" value="',$is2,'">
              <select name="s2" class="prod" onChange="recarga(this.form);">
';
if ($is1>0)
{ $consulta=mysql_query("SELECT nombre, id FROM categoria WHERE relacion=$s1",$link);
  $nf=mysql_num_rows($consulta);
  if ($nf>0)
  { echo '<option value="0" selected>Elija...</option>';
    while ($row=mysql_fetch_array($consulta))
      echo "<option value='",$row["id"],"'>
      ",$row["nombre"],"</option>";
  }
else echo '<option value="0" selected>No hay categorias</option>';
  mysql_free_result($consulta);
}
else echo '<option value="0" selected><ninguno></option>';
echo '
              </select></td>
            <td width="33%"> 
 
              <!------ Tercer Select (s3)---->
<input name="is3" type="hidden" value="',$is3,'">
              <select name="s3" class="prod" id="select3" onChange="recarga(this.form);">
';
if ($is2>0)
{ $consulta=mysql_query("SELECT nombre, id FROM categoria WHERE relacion=$s2",$link);
  $nf=mysql_num_rows($consulta);
  if ($nf>0)
  { echo '<option value="0" selected>Elija...</option>';
    while ($row=mysql_fetch_array($consulta))
      echo "<option value='",$row["id"],"'>
      ",$row["nombre"],"</option>";
  }
  else echo '<option value="0" selected>No hay categorias</option>';
  mysql_free_result($consulta);
}
else echo '<option value="0" selected><ninguno></option>';
echo '
              </select></td>
          </tr>
          </form>
        </table>
';
?>    
  Despues hacemos:
<script language="JavaScript">
selecciona (<? echo $is1; ?>, <? echo $is2; ?>, <? echo $is3; ?>, document.mx.s1, document.mx.s2, document.mx.s3);
</script> 
La funcion conecBD se vincula a la base que se encuentra dentro de la "libreria" funciones.php .....  

 ah si! falta la funciones: recarga() y selecciona()
Aqui estan .....
<script language="JavaScript">
function recarga(form)
{ form.is1.value=form.s1.selectedIndex;
  form.is2.value=form.s2.selectedIndex;
  form.is3.value=form.s3.selectedIndex;
  if (form.s1.selectedIndex != <? echo $is1; ?>)
  { form.is2.value=0;
	form.is3.value=0;}
  if (form.s2.selectedIndex != <? echo $is2; ?>)
  {form.is3.value=0;}
	form.action="prueba_foro.php";
	form.submit();
}//function recarga(...
function selecciona(opt1, opt2, opt3, combo1, combo2, combo3)
{
  combo1.options[opt1].selected= "true";
  combo2.options[opt2].selected= "true";
  combo3.options[opt3].selected= "true";
}//fin de la funcion selecciona
</script> 
ok espero le entiendas al codigo.... cualquier cosa sobre el, puedo aclarartela. ok adios.