del código original prueba utilizando esto
  Código PHP:
    $sql2 = mysql_query("SELECT * FROM soldados WHERE rango=".$campo['id']." LIMIT 10"); 
    
  o bien, puedes checar esto 
 Código PHP:
    <?php
//con esto ya puedes reutilizar la funcion
function Conectarse($host,$user,$pass,$base)
{
    $link=mysql_connect($host,$user,$pass) or die("Error conectando a la base de datos.");
    mysql_select_db($base,$link) or die("Error seleccionando la base de datos.");
    return $link;
}
$link=Conectarse("localhost","webpage","jona159than357","web");
//puedes o no utilizar el apostrofe(`) mysql lo reconoce
//si embargo yo nunca los uso y no he tenido problemas
//no se como esta tu tabla y no se que version de mysql usas asi que
//usare un poco de imaginacion, jeje
//suponiendo que el tipo de rango lo guardas en un campo llamado tipoRango
//con esto traeremos todos los rangos que existen sin repetir
//se quito el * para evitar datos innecesarios
$sql = mysql_query("SELECT nombre, imagen FROM rangos GROUP BY tipoRango");
//mientras se recorre el arreglo traido de la consulta
//buscamos a los soldados que le pertenecen a cada division.
while ($campo = mysql_fetch_array($sql))
    { 
        //se quito el LIMIT 10 para evitar que solo muestre diez registros
        //esto con la finalidad de que en el caso de que hayan mas 
        $sql2 = mysql_query("SELECT nombre FROM soldados WHERE tipoRango=".$campo['tipoRango']);
?>
<table>
<tr>
<td class="td_rango">
<?=$campo["nombre"];?><br />
</td>
<td class="td_rango">
<img src="http://www.clancl.org/<?=$campo["imagen"];?>" alt="Rango <?=$campo["nombre"];?>"><br />
</td>
<td class="td_soldado"><?
//con esto mostramos todos los nombre
//que se encuentren en la segunda consulta
while($campo2 = mysql_fetch_array($sql2))
    {
        echo $campo2["nombre"];
    }?><br /></td>
<td class="td_responsabilidad"></td>
</tr>
</table>
<?php
}
mysql_close($link); //cierra la conexion
?>    
  espero que por lo menos te de una idea, saludos.