Puoi fare cosi..... Cioè ricaricando la pagina html dopo ogni selezione.
Non ho testato ma l'idea c'è. In poche parole metto in una select tutte le categorie e seleziono gli utenti in base alla categoria.
Do' x scontato che la connessione al DB sia già fatta.
codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<?
//--------- Categoria
$idcat = "none";
if (isset($_GET['idcat'])) {
$idcat = $_GET['idcat'];
} // if (isset($_GET['idcat']))
//-------- Query della categoria
$queryCat = "select idcategoria, categoria from tabella order by categoria";
$resCat = mysql_query($queryCat);
//-------- Query utenti della categoria
if ($idcat != "none") {
$querySotCat = "select id_utente, nome_utente, cognome_utente frol tabutente where idcategoria = '$idcat'";
$resSotCat = mysql_query($querySotCat);
}
?>
<form id="f1" action="questa_pagina.php" method="post">
<select name="idcat" onchange="document.getElementById('f1').submit()">
<option value="none">Seleziona una categoria</option><?
while (list($idcategoria, $categoria) = mysql_fetch_array($resCat) {
$selected = $idcat == $idcategoria ? "selected" : "";?>
<option value="<? print $idcategoria ?>" <? print $selected ?>><? print $categoria ?></option><?
} ?>
</select>
</form><?
if ($idutente != "none") {?>
<select name="idutente"><?
while (list($id_utente, $nome_utente, $cognome_utente) = mysql_fetch_array($resSotCat) {?>
<option value="<? print $id_utente ?>"><? print "$cognome_utente $cognome_utente"?></option><?
} ?>
</select><?
} ?>
</body>
</html>