Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Contar registros de dos tablas MYSQL

Estas en el tema de Contar registros de dos tablas MYSQL en el foro de Mysql en Foros del Web. Hola, quisiera hacer lo siguiente: Listar nombres de los alumnos, saber en que cursos están, conocer la cantidad de noticias que han escrito y si ...
  #1 (permalink)  
Antiguo 15/05/2012, 14:39
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Pregunta Contar registros de dos tablas MYSQL

Hola, quisiera hacer lo siguiente:

Listar nombres de los alumnos, saber en que cursos están, conocer la cantidad de noticias que han escrito y si han escrito, saber que cantidad ha sido autorizada.

Para esto he construido tres tablas: cursos, alumnos y noticias.

De esta manera muestro los dos primeros datos (curso y nombre del alumno) hasta acá perfecto, es simple

Código SQL:
Ver original
  1. $ListadoAlumnos="select * from cursos c,alumnos a where c.idcurso=a.idcurso order by c.idcurso";
  2. $resAlumnos=mysql_query($ListadoAlumnos);
  3. while($row=mysql_fetch_array($resAlumnos))
  4. {
  5.         $idalumno=$row['idalumno'];
  6.     $nombre=$row['nombre'];
  7.     $curso=$row['curso'];
  8. }

Ahora, no se como contar de la tercera tabla(noticias) los idalumno para saber la cantidad de noticias que han escrito. En esa misma tabla (noticias) tengo un registro llamado "autorizado" con el cual se autoriza la publicación. Tampoco se como seleccionar y contar este último registro para lograr lo que explique más arriba.
alguien me da una mano?
  #2 (permalink)  
Antiguo 15/05/2012, 14:49
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Contar registros de dos tablas MYSQL

los datos involucrados son:

cursos:
idcurso
curso

alumnos
idalumno
nombre

noticias
idalumno
autorizado

lo que me deseo obtener como resultado:

7º Básico A - Mario González 5 noticias escritas - 1noticia publicada
7º Básico A - Carlos Gómez 0 noticias escritas - 0 noticia publicada
8º Básico B - Javiera Pérez 12 noticias escritas - 5noticia publicada

...me pueden enseñar a hacer esto por favor :)
  #3 (permalink)  
Antiguo 16/05/2012, 05:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Contar registros de dos tablas MYSQL

Primero falta un id

noticias
idNoticia
idalumno
autorizado

Siempre que autorizado sea booleano

Código MySQL:
Ver original
  1. SELECT c.idcurso,
  2.              c.curso,
  3.              a.nombre,
  4.              SUM(if(idNoticia IS NULL,0,1)) as escritas,
  5.              SUM(if(autorizado,1,0)) as publicadas
  6. FROM (cursos c INNER JOIN alumnos a
  7.      ON c.idcurso=a.idcurso)
  8.            LEFT JOIN noticias n
  9.                 ON a.idAlumno=n.idAlumno
  10. GROUP BY c.idcurso,c.curso,a.nombre;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 16/05/2012, 09:10
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Contar registros de dos tablas MYSQL

Hola quimfv, agradezco mucho tu apoyo.
Hice algunas modificaciones en la consulta (como podrás ver) ya que puse los datos verdaderos. Pegue la query en phpmyadmin y da el siguiente error:


Error
consulta SQL:

SELECT c.idcurso, c.curso, a.nombre, SUM( IF( idNP IS NULL , 0, 1 ) ) AS escritas, SUM( IF( permiso, 1, 0 ) ) AS publicadas
FROM (

cursos c
INNER JOIN alumnos a ON c.idalumno = a.idalumno
)
LEFT JOIN noticiasPeriodistas n ON a.idalumno = n.idalumno
GROUP BY c.idcurso, c.curso, a.nombre
LIMIT 0 , 30
MySQL ha dicho:

#1052 - Column 'permiso' in field list is ambiguous

Un dato importante a aclarar.

Cuando escribí:

7º Básico A - Mario González 5 noticias escritas - 1noticia publicada
7º Básico A - Carlos Gómez 0 noticias escritas - 0 noticia publicada
8º Básico B - Javiera Pérez 12 noticias escritas - 5noticia publicada

con los campos reales sería así:

7º Básico A - Mario González - idNP = 5 - permiso = 0 (5 noticias escritas, ninguna publicada)
7º Básico A - Carlos Gómez - idNP = 3 - permiso = 2 (3 noticias escritas, 2 publicada)
8º Básico B - Javiera Pérez - idNP= 9 - permiso = 4 (9 noticias escritas, 4 publicada)

La tabla noticiaPeriodistas:

idNP (id noticia publicada)
idalumno ()

espero se entienda :)
gracias.
  #5 (permalink)  
Antiguo 16/05/2012, 09:59
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Contar registros de dos tablas MYSQL

De a poco lo voy consiguiendo....

con esta Cuery:

Código SQL:
Ver original
  1. SELECT a.idalumno, a.nombre, COUNT(n.idNP) cuentaNoticia FROM noticiasPeriodistas n LEFT JOIN alumnos a ON a.idalumno = n.idalumno GROUP BY n.idalumno ORDER BY a.nombre ASC;

estoy obteniendo:

nombre alumno - total noticias escritas

me falta incorporar curso y noticias publicadas. O sea:

curso - nombre - noticias escritas - noticias publicadas

si sabes como hacerlo te lo agradecería.
  #6 (permalink)  
Antiguo 17/05/2012, 01:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Contar registros de dos tablas MYSQL

MySQL ha dicho:

#1052 - Column 'permiso' in field list is ambiguous

Eso quiere decir que tienes el campo permiso en mas de una tabla y no le estas indicando de que tabla debe sacarlo....

Código MySQL:
Ver original
  1. SELECT c.idcurso,
  2.              c.curso,
  3.              a.nombre,
  4.              SUM( IF( n.idNP IS NULL , 0, 1 ) ) AS escritas,
  5.              SUM( IF( n.permiso, 1, 0 ) ) AS publicadas
  6.          cursos c
  7.               INNER JOIN alumnos a
  8.                     ON c.idalumno = a.idalumno
  9.            ) LEFT JOIN
  10.                  noticiasPeriodistas n
  11.                      ON a.idalumno = n.idalumno
  12. GROUP BY c.idcurso, c.curso, a.nombre
  13. LIMIT 0 , 30;

Con el alias (n) de la tabla debería funcionar ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 17/05/2012, 09:05
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Contar registros de dos tablas MYSQL

Hola quimfv,

primero, gracias por tu tiempo y buena disposición.

utilice la query y me sale este error:

#1054 - Unknown column 'c.idalumno' in 'on clause'


Código MySQL:
Ver original
  1. SELECT c.idcurso,
  2.              c.curso,
  3.              a.nombre,
  4.              SUM( IF( n.idNP IS NULL , 0, 1 ) ) AS escritas,
  5.              SUM( IF( n.permiso, 1, 0 ) ) AS publicadas
  6.          cursos c
  7.               INNER JOIN alumnos a
  8.                     ON c.idalumno = a.idalumno
  9.            ) LEFT JOIN
  10.                  noticiasPeriodistas n
  11.                      ON a.idalumno = n.idalumno
  12. GROUP BY c.idcurso, c.curso, a.nombre
  13. LIMIT 0 , 30;

Esto porque no existía el campo idalumno en la tabla curso. Así que lo cambié por: n.idalumno
(cursos c INNER JOIN alumnos a ON a.idalumno = n.idalumno)

y me sale:

#1054 - Unknown column 'n.idalumno' in 'on clause'

me gustaría entender bien lo que haces para poder detectar el problema y corregirlo.
  #8 (permalink)  
Antiguo 17/05/2012, 14:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Contar registros de dos tablas MYSQL

Craso error mio, en la tabla alumnos debe haber un idCurso y lo que tienes que poner es, como tenias en tu primer codigo

ON c.idCurso = a.idCurso


NO


ON c.idalumno = a.idalumno


Y en noticias debe haber un idAlumno luego n.idalumno no fallará

ON a.idalumno = n.idalumno

Sorry
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 17/05/2012, 15:01
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Contar registros de dos tablas MYSQL

Podrías copiar y pegar y luego hacer el arreglo que siguieres?. La verdad es que no entendí, puesto que el primer código que puse no se acercaba en nada a lo que había logrado hasta el momento.


este es el que funciona bien:

Código MySQL:
Ver original
  1. select a.idalumno, a.nombre, count(n.idNP) cuentaNoticia from noticiasPeriodistas n left join alumnos a on a.idalumno = n.idalumno group by n.idalumno order by a.nombre ASC

como te decía solo necesito que aparezca el curso y las noticias publicadas, o sea:


curso - nombre - noticias escritas - noticias publicadas (las que faltan en negrita)

Última edición por yole; 17/05/2012 a las 15:07
  #10 (permalink)  
Antiguo 18/05/2012, 01:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Contar registros de dos tablas MYSQL

cursos
idcurso
curso

alumnos
idalumno
idcurso
nombre

noticiasPeriodistas
idnoticia
idalumno
autorizado


Código MySQL:
Ver original
  1. SELECT c.idcurso,
  2.              c.curso,
  3.              a.nombre,
  4.              SUM( IF( n.idNP IS NULL , 0, 1 ) ) AS escritas,
  5.              SUM( IF( n.permiso, 1, 0 ) ) AS publicadas
  6.          cursos c
  7.               INNER JOIN alumnos a
  8.                     ON c.idcurso = a.idcurso
  9.            ) LEFT JOIN
  10.                  noticiasPeriodistas n
  11.                      ON a.idalumno = n.idalumno
  12. GROUP BY c.idcurso, c.curso, a.nombre
  13. LIMIT 0 , 30;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: registros, select, sql, tabla, tablas
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 00:22.