bueno pues primero que nada no es necesario que agas una segunda conexion, y yo recomendario manejar variables diferentes en el fetch
Código PHP:
<?
$db="costos";
$tabla="actividades";
$tabla2="actividades_proyecto";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="select actividades.id_actividad,actividades.descripcion,actividades.unidad,actividades_proyecto.id_actividad,actividades_proyecto.cantidad from actividades left join actividades_proyecto on actividades.id_actividad=actividades_proyecto.id_actividad ";
$result=mysql_query($sql,$conexion);
echo "<left><table border=1>";
echo "<tr><th><font color=black>Codigo</th>";
echo "<th><font color=black>Descripcion</th>";
echo "<th width='20'><font color=black>Unidad</th>";
echo "<th><font color=black>Cantidad</th>";
echo "<th><font color=black>Costo</th>";
echo "<th><font color=black>Subtotal</th>";
while($row = mysql_fetch_array($result))
{
echo '<tr><td><font color=black>'.$row["id_actividad"].'</td>';
echo '<td><font color=black>'.$row["descripcion"].'</td>';
echo '<td width="20"><font color=black>'.$row["unidad"].'</td>';
echo '<td width="20"><font color=black>'.$row["cantidad"].'</td>';
$id=$row["id_actividad"];
$cant=$row["cantidad"];
$tabla="materiales";
$tabla2="materiales_actividad";
$sql="SELECT materiales.id_material, materiales.descripcion, materiales.unidad,ROUND( SUM( materiales.precio * materiales_actividad.cantidad ),2) AS total
FROM $tabla
LEFT JOIN $tabla2 ON materiales.id_material = materiales_actividad.id_material
AND materiales_actividad.id_actividad ='".$id."'
GROUP BY materiales_actividad.id_actividad";
$result1=mysql_query($sql,$conexion);
while($row1 = mysql_fetch_array($result1))
{
$total1=$row1["total"];}}
ya que utilisas while fetch(variable) y dentro del mismo while estas poniendo while(fetch(variable)) utilisas la misma variable creo yo que eso puede meter ruido jejeje creo yo es solo una sugerencia pero lo de la conexion no es necesario 2 veces jeje