Hola Shaito
Creo que la solución al problema va más de la mano de la programación de la página que de la consulta (aunque igual debieras agregarle un ORDER BY album).
Para que todas las imágenes te queden dentro un mismo álbum, debieras hacer un IF dentro del WHILE, que pregunte si el álbum actual es distinto al anterior, y sólo ahí imprimir las tags que forman el nuevo álbum (tanto el inicio como el cierre), mientras que las tags de las imágenes siempre debieran imprimirse.
Algo como esto:
Código PHP:
$ultimoAlbum = "";
$contador = 0;
while ($row=mysql_fetch_array($result))
{
if ($ultimoAlbum != $row["album"])
{
if ($contador > 0)
{
echo '
<span class="cover boxcaption">
<strong>'.$ultimoAlbum.'</strong>
</span>
</span>
</li>
';
}
echo '<li data-id="'.$row["album"].'" class="'.$row["categoria"].','.$row["categoria2"].','.$row["categoria3"].'">
<span class="boxgrid caption">';
echo '
<a href="galeria/'.$row["carpeta"].'/'.$row["nombre"].'" class="fancybox" rel="'.$row["album"].'">
<img src="galeria/'.$row["carpeta"].'/'.$row["nombre"].'"/>
</a>';
}
echo '
<a href="galeria/'.$row["carpeta"].'/'.$row["nombre"].'" class="fancybox" rel="'.$row["album"].'"></a>';
$contador++;
}