PHP - Ahora si Problemas con listado (producto cartesiano)

 
Vista:
sin imagen de perfil

Ahora si Problemas con listado (producto cartesiano)

Publicado por anonymous (2 intervenciones) el 22/05/2015 09:00:32
Hola buenas a todos, espero que no se asusten al ver tanto codigo jeje.

Espero puedan ayudarme. Practicamente el problema lo tengo en el primer fragmento de codigo, que es una parte del segundo codigo que he adjuntado (el script de la vista).

El problema que tengo es que quiero que al listar los profesores aparezca el nombre solo una vez, como he hecho con los grupos, pero no consigo hacer lo mismo para este campo.

Pueden decirme que estoy haciendo mal? LLevo horas intentando sacarlo, pero no hay manera.

Muchas gracias y un saludo.

La consulta que me devuelve todas las propuestas, es la siguiente:

1
2
3
4
5
6
SELECT p.cod_propuesta, p.fecha,p.reserva,p.transporte,p.entrada, p.tipo_periodo, p.creado_por, p.fecha_creacion, p.modificado_por, p.fecha_modificacion, d.nombre as destino,d.direccion,g.nombre as grupo, concat_ws(' ', u.nombre,u.apellidos) as profesor FROM destinos d
      						INNER JOIN propuestas p ON d.cod_destino=p.destino
      						INNER JOIN grupos_participantes_propuesta gpp ON p.cod_propuesta = gpp.cod_propuesta
      						INNER JOIN profesores_participantes_propuesta ppp ON p.cod_propuesta=ppp.cod_propuesta
      						INNER JOIN grupos g ON gpp.id_grupo=g.id_grupo
      						INNER JOIN usuarios u ON ppp.usuario=u.usuario

Como se ve mi listado:

D69vfp

Codigo PHP donde se pintan los grupos y profesores en la tabla:

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
$ultimaPropuesta = 0;
    $ultimoGrupo = "";
    $ultimoProfesor = "";
    $profesorAnterior = "";
    $contenidoAntes = "";
    $contenidoGrupos = "";
    $contenidoProfesores = "";
    $contenidoDespues = "";
 foreach ($propuestas as $unaPropuesta) {
            if($unaPropuesta->devuelveCod_propuesta() == $ultimaPropuesta){//Seguimo en la misma propuesta que la anterior
                if($unaPropuesta->devuelveGrupo() != $ultimoGrupo){
                    $contenidoGrupos .= "{$unaPropuesta->devuelveGrupo()} <br>";
                    $ultimoGrupo = $unaPropuesta->devuelveGrupo();
                }
                if($unaPropuesta->devuelveProfesor() != $ultimoProfesor){
                    $contenidoProfesores .= "{$unaPropuesta->devuelveProfesor()} <br>";
                    $ultimoProfesor = $unaPropuesta->devuelveProfesor();
                }
            }else{//Se ha producido un cambio de propuesta
                if($ultimaPropuesta > 0){//No se trata de la primera iteracion
                    $contenido = $contenido . $contenidoAntes . $contenidoGrupos . "</td>" . $contenidoProfesores . "</td>" . $contenidoDespues;
                    $contenidoAntes = "";
                    $contenidoGrupos = "";
                    $contenidoProfesores = "";
                    $contenidoDespues = "";
                }
                $ultimaPropuesta = $unaPropuesta->devuelveCod_propuesta();
                $ultimoGrupo = $unaPropuesta->devuelveGrupo();
                $ultimoProfesor = $unaPropuesta->devuelveProfesor();
                $contenidoAntes = "
            <tr>
              <td>{$unaPropuesta->devuelveFecha()}</td>
              <td>{$unaPropuesta->devuelveDestino()}</td>
              <td>{$unaPropuesta->devuelveReserva()}</td>
              <td>{$unaPropuesta->devuelveTransporte()}</td>
              <td>{$unaPropuesta->devuelveEntrada()}</td>
              ";
              $contenidoGrupos = "<td>{$unaPropuesta->devuelveGrupo()} <br>";
              $contenidoProfesores = "<td>{$unaPropuesta->devuelveProfesor()} <br>";
              $contenidoDespues = "<td>{$unaPropuesta->devuelveFecha_creacion()}</td>
              <td>{$unaPropuesta->devuelveCreado_por()}</td>
              <td>{$unaPropuesta->devuelveFecha_modificacion()}</td>
              <td>{$unaPropuesta->devuelveModificado_por()}</td>
              <td><a href=\"javascript:confirmaBaja('{$unaPropuesta->devuelveCod_propuesta()}')\"> <img src='{$img}lapiz.jpg' width='25' height='25' /></a></td>
              <td><a href=\"javascript:confirmaBaja('{$unaPropuesta->devuelveCod_propuesta()}')\"> <img src='{$img}aspa-roja.gif' width='25' height='25' /></a></td>
            </tr>";
            }
        }
        if($ultimaPropuesta > 0){//Se ha recibido alguna propuesta
                    $contenido = $contenido . $contenidoAntes . $contenidoGrupos . "</td>" . $contenidoProfesores . "</td>" . $contenidoDespues;
                }

Resto Codigo PHP de la vista:

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
<?php
    require_once "modelo/Propuesta.php";
    require_once "conf/constantes.php";
 
    class VistaListadoPropuesta {
 
      static function construye($propuestas) {
 
        $img = DIR_RAIZ_APP . '/img/';
        $titulo = "Listado de Propuestas";
        $contenido = "
          <h1>$titulo</h1>
          <table border='1' cellpadding='5' cellspacing='3'>
          <tr>
            <th>Fecha</th>
            <th>Destino</th>
            <th>Necesidad reserva</th>
            <th>Necesidad de transporte</th>
            <th>Necesidad de compra de entradas</th>
            <th>Grupos</th>
            <th>Profesores</th>
            <th>Fecha de creación</th>
            <th>Creado por</th> 
            <th>Fecha de modificacion</th>
            <th>Modificado por</th>
            <th>Modificar</th>
            <th>Eliminar</th>
          </tr>
        ";
        $ruta = DIR_RAIZ_APP . INDEX;
 
       //Fragmento de codigo de arriba va aqui
 
        $contenido .= "
          </table>
            <script>
                function confirmaBaja(propuesta) {
                    respuesta = confirm('¿Está seguro de querer eliminar la propuesta?');
                    if (respuesta)
                        document.location.href = '{$ruta}propuesta/baja_propuesta?propuesta=' + propuesta;
                    else
                        alert('No se eliminará la propuesta');
                }
            </script>
          <br />
          ";
        return $contenido;
      }
    }
    ?>
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