PHP - listado PHP

 
Vista:
sin imagen de perfil
Val: 5
Ha disminuido su posición en 216 puestos en PHP (en relación al último mes)
Gráfica de PHP

listado PHP

Publicado por maquiraul (3 intervenciones) el 07/06/2020 18:58:30
Os explico:

Tengo 2 tablas, una de alumnos y otra de pendientes.
La tabla de alumnos tiene DNI,nombre, apellido,nota,...
La clave de pendientes tiene en DNI como clave foranea (esta vinculada con la de alumnos) y cuenta con unas siglas (resultados de aprendizaje suspensos).

Pues tengo que mostrar todos los alumnos en una lista con sus datos incluyendo los resultados de aprendizaje (siglas) que tienen suspenso.

El problema que tengo es que se me repiten los alumnos por cada resultado de aprendizaje suspenso, es decir, sí el alumnos X tiene suspenso TT y UU pues me sale el alumno X dos veces, una vez con el suspenso de TT y otra con el suspenso de UU. Cuando sus datos solo tienen que aparecer una vez.

¿Alguna ayuita?

Os paso el codigo que tengo por el momento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
include 'conectar php';
session_start();
 
$sql = "SELECT * FROM alumnos WHERE DNI NOT IN(SELECT DNI FROM pendientes)";
$sql2 = "SELECT a.*, p.siglas FROM alumnos a,pendientes p WHERE a.DNI=p.DNI ";
$resultado = $conexion->query($sql);
$resultado2 = $conexion->query($sql2);
 
 
    if($resultado->num_rows>0)
    {
        $fila=$resultado->fetch_array();
        echo "ALUMNOS CON TODO APROBADO";
        while($fila){
            echo"<ul>";
            echo"<li>";
            echo"  DNI: ",$fila['DNI'];
            echo"</li>";
            echo"<li>";
            echo"   Nombre: ",$fila['nombre'];
            echo"</li>";
            echo"<li>";
            echo"   Apellido: ",$fila['apellido'];
            echo"</li>";
            echo"<li>";
            echo"   Nota: ",$fila['nota'];
            echo"</li>";
            echo"</ul>";
            echo"<br/>";
            $fila=$resultado->fetch_array();
        }
 
 
        }
        else {
        print_r("no se encuentra : ".$resultado->num_rows);
    }
 
 
    if($resultado2->num_rows>0)
 
    {
        $fila2=$resultado2->fetch_array();
        echo "ALUMNOS CON ALGUNOS RA SUSPENSOS";
        while($fila2){
            echo"<ul>";
            echo"<li>";
            echo"  DNI: ",$fila2['DNI'];
            echo"</li>";
            echo"<li>";
            echo"   Nombre: ",$fila2['nombre'];
            echo"</li>";
            echo"<li>";
            echo"   Apellido: ",$fila2['apellido'];
            echo"</li>";
            echo"<li>";
            echo"   Nota: ",$fila2['nota'];
            echo"</li>";
            echo"RA suspensos: ",$fila2['siglas'];
            echo"</ul>";
            echo"<br/>";
            $fila2=$resultado2->fetch_array();
        }
 
 
        }
        else {
        print_r("no se encuentra : ".$resultado2->num_rows);
    }
?>



EDIT2:

He modificado el codigo para introducir los Resultados suspensos sin separar los alumnos entre los que no tienen nada suspenso y los que tienen algo suspenso.
El problema es que ahora solo el primer alumno recibe los resultados suspensos de todos los alumnos.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
include 'conectar.php';
session_start();
 
$sql = "SELECT * FROM alumnos";
$sql2 = "SELECT * FROM alumnos,pendientes WHERE alumnos.DNI=pendientes.DNI ";
$resultado = $conexion->query($sql);
$resultado2 = $conexion->query($sql2);
 
 
if($resultado->num_rows>0)
{
    $fila=$resultado->fetch_array();
    $fila=$resultado2->fetch_Array();
    echo "ALUMNOS";
    while($fila){
        echo"<ul>";
        echo"<li>";
        echo"  DNI: ",$fila['DNI'];
        echo"</li>";
        echo"<li>";
        echo"   Nombre: ",$fila['nombre'];
        echo"</li>";
        echo"<li>";
        echo"   Apellido: ",$fila['apellido'];
        echo"</li>";
        echo"<li>";
        echo"   Nota: ",$fila['nota'];
        echo"</li>";
        echo"<li>";
        while($fila) {
            echo" RA Suspensos: ",$fila['siglas'];
            $fila=$resultado2->fetch_Array();
        }
            echo"</li>";
                echo"</ul>";
                echo"<br/>";
                $fila=$resultado->fetch_array();
 
 
    }
}
 
 
    else {
    print_r("no se encuentra : ".$resultado->num_rows);
}
 
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

listado PHP

Publicado por Julio (830 intervenciones) el 08/06/2020 08:37:44
Hola.

En el primer ejemplo que has puesto, ¿el segundo SQL es el que trae lo de los suspensos? Si se te repiten alumnos, prueba a poner GROUP BY (a) en la consulta para que te los agrupe. No sé si te funcionará bien a la primera porque quieres sacar datos de dos filas y no recuerdo ahora cómo te los agrupará exactamente, pero prueba a orientarlo por ahí.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

listado PHP

Publicado por javier (547 intervenciones) el 08/06/2020 20:26:37
Hola,

No se bien lo que quieres hacer pero mira bien estas lineas, por que haces dos consultas a la BBDD seguidas y solo usas una, cambia eso y podras empezar a evaluar si funciona o no funciona bien tu codigo.

1
2
3
4
5
6
7
8
9
10
$sql = "SELECT * FROM alumnos";
$sql2 = "SELECT * FROM alumnos,pendientes WHERE alumnos.DNI=pendientes.DNI ";
$resultado = $conexion->query($sql);
$resultado2 = $conexion->query($sql2);
 
 
if($resultado->num_rows>0)
{
    $fila=$resultado->fetch_array();
    $fila=$resultado2->fetch_Array();

no ves que $fila siempre va a ser == a $resultado2->fetch_Array(); que nunca usas los valores de $fila=$resultado->fetch_array();, que estas sobreescribiendo la variable $fila, y no es que no se suela hacer, pero en este caso no.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

listado PHP

Publicado por javier (547 intervenciones) el 08/06/2020 20:33:32
y podrias comentar como lo solucionaste, por favor, a si cuando alguien tenga el mismo problema, podrá ayudarle.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha disminuido su posición en 216 puestos en PHP (en relación al último mes)
Gráfica de PHP

listado PHP

Publicado por maquiraul (3 intervenciones) el 08/06/2020 20:38:54
No es un formato de lista. Pero cumple con lo que necesitaba.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
include 'conectar.php';
$sql="SELECT * FROM alumnos";
$resultado=$conexion->query($sql);
$fila=$resultado->fetch_array();
while($fila)
{
    ?><form><?php
    echo("<b>DNI</b> : " . $fila['DNI']);?><br><?php
    echo("<b>Nombre</b> : " . $fila['nombre']);?><br><?php
    echo("<b>apellido</b> : " . $fila['apellido']);?><br><?php
    echo("<b>nota</b> : " . $fila['nota']);?><br><?php
    echo("<b>Resultados Supensos</b> : ");?><?php
 
     $sql2="SELECT p.siglas FROM pendientes p,alumnos a WHERE a.DNI=p.DNI AND p.DNI='$fila[DNI]'";
     $resultado2=$conexion->query($sql2);
     $fila2=$resultado2->fetch_array();
     while($fila2)
     {
       echo($fila2['siglas']);?><br><?php
       $fila2=$resultado2->fetch_array();
     }
 
     $fila=$resultado->fetch_array();
    ?></form><br><?php
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

listado PHP

Publicado por javier (547 intervenciones) el 08/06/2020 21:35:21
Hola,

Pefecto si te funciona, pero sigues haciendo dos consultas seguidas a la BBDD, lo que no es eficiente, deberias hacer solo una usando INNER JOIN, pero vamos que si sales del paso de esa manera............


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar