Foros del Web » Programando para Internet » PHP »

consulta Mysql

Estas en el tema de consulta Mysql en el foro de PHP en Foros del Web. Buenas una consulta, tengo una tabla que me almacena notas por clase para cada alumno con la siguiente estructura Código: CREATE TABLE `nota` ( `codigo_matricula` ...
  #1 (permalink)  
Antiguo 17/10/2017, 12:37
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años
Puntos: 1
consulta Mysql

Buenas una consulta,
tengo una tabla que me almacena notas por clase para cada alumno con la siguiente estructura

Código:
CREATE TABLE `nota` (
	`codigo_matricula` INT(11) NOT NULL,
	`idalumno` CHAR(13) NOT NULL,
	`nota1` INT(3) NULL DEFAULT NULL,
	`n1` INT(2) NULL DEFAULT NULL,
	PRIMARY KEY (`codigo_matricula`, `idalumno`)
)
al realizar un select como el siguiente

Código:
SELECT idalumno, nota1,n1
    FROM nota order by idalumno



me genera el siguiente resultado

Código:
idalumno---nota1---n1
1------------60------10
1------------40------20
1------------90------0
2------------50------15
2------------80------0
2------------70------0

pero de esa manera no me sirve, lo que quiero es mostrar los datos de un mismo alumno en una fila y no en varias

logre realizar lo siguiente con esta consulta.

Código:
SELECT idalumno, GROUP_CONCAT(nota1,'-',n1)
    FROM nota
    GROUP BY idalumno
y el resultado es el siguiente


Código:
idalumno------GROUP_CONCAT
1------------60-10,40-20,90-0
2------------50-15,80-0,70-0

los agrupa en la fila, pero el grupo concatenado lo muestra en una sola columna y es ahí la pregunta ¿Como le puedo hacer para me los agregue por columnas, algo así.

Código:
idalumno-----c1--c2---c3---c4--c5--c6
1------------60--10---40---20--90--0
2------------50--15---80---0---70--0
o por lo menos así
Código:
idalumno------c1--c2---c3
1-------------60--40---90
2-------------50--80---70

cualquier orientación les agradeceré
  #2 (permalink)  
Antiguo 17/10/2017, 15:16
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: consulta Mysql

Antes que nada, que quieres hacer?
  #3 (permalink)  
Antiguo 17/10/2017, 16:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: consulta Mysql

Esto no tiene que ver con PHP en absoluto, muevo tu tema a MySQL.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 17/10/2017, 20:24
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años
Puntos: 1
Respuesta: consulta Mysql

Disculpen que no termine de explicar
el problema esta, que deseo llenar una tabla html con php y mysql.
pero me la llena

Código PHP:
Ver original
  1. $sql="SELECT idalumno,nota,n1
  2.                         FROM nota order by idalumno";
  3.                
  4.            
  5.            
  6.             $resul=mysqli_query($conexion,$sql);
  7.            
  8.            while($ver= mysqli_fetch_row($resul)) {
  9.               $datos=$ver[0]."||".
  10.                       $ver[1]."||".
  11.                       $ver[2];    
  12.                    
  13.                        
  14.                ?>
  15.             <tr>
  16.                
  17.                 <td><?php echo $ver[0] ?></td>
  18.                 <td><?php echo $ver[1] ?></td>
  19.                 <td><?php echo $ver[2] ?></td>
  20.             </tr>

pero me la llena como lo expuse anteriormente cada registro en una fila.

pero de esa manera no me sirve, lo que quiero es mostrar los datos de un mismo alumno en una fila y no en varias

logre realizar lo siguiente con esta consulta.

Código SQL:
Ver original
  1. SELECT idalumno, GROUP_CONCAT(nota1,'-',n1)
  2.     FROM nota
  3.     GROUP BY idalumno

que me los muestra de la siguiente manera.

Cita:
idalumno------GROUP_CONCAT
1------------60-10,40-20,90-0
2------------50-15,80-0,70-0
los agrupa en la fila, pero el grupo concatenado lo muestra en una sola columna y es ahí la pregunta ¿Como le puedo hacer para me los agregue por columnas, algo así.

Cita:
idalumno------c1--c2---c3
1-------------60--40---90
2-------------50--80---70
los datos del alumno por fila pero en diferentes columnas, no se si me explico

Última edición por gnzsoloyo; 18/10/2017 a las 05:35
  #5 (permalink)  
Antiguo 18/10/2017, 05:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consulta Mysql

Bueno, alli si se ve que tu problema es PHP. E problema es que no lo estás analizando bien... Si lo meditas es bastante simple.

En primer lugar, tienes que crear en la tabla tantas columnas como notas tenga, pero además tiene que ser igual a la cantidad de columnas del alumno que tenga más notas, mas uno (para el nombre). El resto sólo deberán llenar las celdas que lleguen a cubrir. Esto por supuesto, requiere una consulta para obtener ese valor.
Por otro lado, en lugar de recorrer la tabla resultado así nomas tienes que:
1) Tomar el nombre del alumno e iniciar el registro poniendo el nombre en la primera celda.
2) Seguir recorriendo recorrer los siguientes registros agregando esos datos en una columna mientras el nombre del alumno no cambie.
3) Cuando cambia el nombre respecto del que tomaste, lo reemplazas en la variable y generas un nuevo registro (volver al punto 1)
4) Sigues hasta que terminas...

No hay truco. Es simple técnica de programación.

Muevo de vuelta a PHP para que alguien te asesore como hacerlo correctamente, aunque con lo que te dije debería ser posible que lo hicieras por ti mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:50.