PHP - Reducción de tabla en MySQL

   
Vista:

Reducción de tabla en MySQL

Publicado por MIguel (2 intervenciones) el 13/01/2016 03:28:48
Me encuentro en la siguiente situación y no se qué hacer o mejor dicho cómo hacerlo. Tengo una tabla en MySQL con la siguiente estructura:
Apellidos-----Incidencias
B-F ------------ aaa
B-F ------------ bbb
B-F ------------ccc
M-P ------------xxx
M-P ------------hhh
M-P ------------kkk
M-P ------------ppp
Q-T ------------ddd
Q-T ------------ggg

La idea sería lograr una nueva tabla donde los apellidos que sean iguales no se repitan y las incidencias estén todas en un solo campo quedando la tabla resultante de la siguiente manera.
Apellidos-----Incidencias
B-F ------------aaa bbb ccc
M-P ------------xxx hhh kkk ppp
Q-T ------------ddd ggg
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 VRM

Reducción de tabla en MySQL

Publicado por VRM (169 intervenciones) el 13/01/2016 10:10:11
Hola:

Suponiendo que los datos están en una matriz de la forma:
1
2
$datos[apellidos]
$datos[incidencia]
Y está ordenada por el apellido.
Yo haría lo siguiente:
(1) abrir la tabla
(2) un for recorre la matriz
(2.a) Se guarda el apellido en una variable ($apellido) y la incidencia en otra ($incidencias)
(2.b) Se avanza un elemento en la tabla
(2.c) Mientras el apellido sea igual se añade la incidencia a lavariable ($incidencias) y se guarda el número de incidencias
(2.d) Cuando se termina se escribe $apellido e $incidencias en la tabla
(2.d) Se avanzan tantos elementos en la matriz como incidencias extras
(3) Se cierra la tabla.

El código sería:
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
$datos[] = array("apellidos" => "B-F","incidencia" => "aaa");
$datos[] = array("apellidos" => "B.F","incidencia" => "bbb");
$datos[] = array("apellidos" => "B.F","incidencia" => "ccc");
$datos[] = array("apellidos" => "M-P","incidencia" => "xxx");
$datos[] = array("apellidos" => "M-P","incidencia" => "hhh");
$datos[] = array("apellidos" => "M-P","incidencia" => "kkk");
$datos[] = array("apellidos" => "M-P","incidencia" => "ppp");
$datos[] = array("apellidos" => "Q-T","incidencia" => "ddd");
$datos[] = array("apellidos" => "Q-T","incidencia" => "ggg");
 
echo "<table>";
echo "<tr><th>Apellidos</th><th>Incidencias</tu></tr>";
 
for ($i=0;$i<count($datos);$i++){
	$apellido = $datos[$i][apellidos];
	$incidencias = $datos[$i][incidencia];
 
	while ( $apellido == $datos[$i+1][apellidos] AND $i < count($datos) ) {
		$i++;
		$incidencias .= " ".$datos[$i][incidencia];
	}
 
	echo "<tr><td>$apellido</td><td>$incidencias</td></tr>";
}
 
echo "</table>";

Saludos de Víctor.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Reducción de tabla en MySQL

Publicado por MIguel (2 intervenciones) el 14/01/2016 15:34:12
Gracias por todo. Saludos Miguel
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