Bueno, asi de cabeza se me ocurre:
Código PHP:
echo "A<br>"; // cabecera para A
$letra_actual=65;
while($row=mysql_fetch_Array($result)) {
$reg_actual=strtoupper(substr($row["nombre"],0,1)); // letra del registro actual
if ($reg_actual!=$letra_actual) {
for ($i=$letra_actual+1;$i<=$reg_actual;$i++) {
echo $i.'<br>'; // las distintas cabeceras
}
$letra_actual=$reg_actual;
}
echo $row['nombre']; // y el resto de campos del registro.
}
if (90!=$letra_actual) {
// para mostrar hasta la Z
for ($i=$letra_actual;$i<=90;$i++) {
echo $i.'<br>'; // las distintas cabeceras
}
}
No lo he probado, asi que puede fallar por todos sitios.
La teoria es almacenar 2 "punteros", uno con la letra mostrada en el titulo (A-Z) que se ha mostrado el ultimo, y otro con la letra del registro actual. Si no coinciden, se muestran los titulos desde la siguiente a la ultimo titulo mostrado, hasta el actual del registro. Y se iguala los dos valores. Asi el siguiente registro coincide con el ultimo titulo y no se muestran mas titulos. Y al final se muestran los titulos que van despues del ultimo registro.
Saludos.