Creo que tenes un error en la forma de recorrer el resultado de la consulta.
Con la linea:
$datosa=mysql_fetch_array($id);
en $datosa tienes sólo una fila del resultado, no la tabla completa. Luego, con:
foreach($datosa as $k)
recorrés esa fila obteniendo en cada iteracion, en la variable $k, un campo de la fila (y por como es la consulta, dicha fila tiene sólo un campo: correl_cod_mat).
La forma correcta de hacerlo creo que sería mas o menos así
Código PHP:
<?
...
while ($datosa=mysql_fetch_row($id)) {
$k = $datosa[0];
$selectb="SELECT reg_alumno_mesa.cod_alumno , reg_alumno_mesa.nota , reg_mesa.cod_mat ,
reg_alumno_mesa.cod_mesa
FROM reg_alumno_mesa INNER JOIN reg_mesa
ON reg_alumno_mesa.cod_mesa = reg_mesa.cod_mesa
WHERE reg_mesa.cod_mat = '$k' AND reg_alumno_mesa.cod_alumno = '$cod_alumno'
ORDER BY reg_alumno_mesa.cod_mesa DESC LIMIT 1";
$id2=mysql_query($selectb);
$datosb=mysql_fetch_array($id2);
$filas=mysql_num_rows($id2);
if($datosb['nota'] < 6 or $filas==0)
{
$cuenta++;
$_SESSION['lefaltan'][]=$k;
}
}
...
?>
Saludos.