Comunidad de diseño web y desarrollo en internet online

combinar 3 tablas relacionas, sentencia sql query

Citar            
MensajeEscrito el 25 Sep 2010 11:00 pm
hola un saludo a todos...
necesito resolver el siguiente problema...

tengo 3 tablas relacionadas por un id ejemplo:

tabla alumnos:

idalumno nombres
1 luis
2 predro
3 marcos
. .
. .
. .


tabla actividades:

idactividad descrición
1 tareas
2 taller
. .
. .
. .

tabla alumnos_actividades

idalumnos_actividades idalumno idactividad calificacion
1 1 2 3,2
2 2 1 3,1
. . . .
. . . .
. . . .

de esta combinacion necesito generar una consulta de este tipo

nombres descricion nota
luis taller 3,2
luis tareas null
pedro tareas 3,1
pedro taller null
. . .
. . .
. . .

he intentado pero no lo he logrado agradezco de ante mano...su colaboración
gracias...y saludos

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 26 Sep 2010 01:02 am
prueba con la siguiente sentencia sql:

Código PHP :

$sql = "SELECT nombre, descripcion, nota 
          FROM (alumnos a, actividades b, alumnos_actividades c)
          WHERE a.idalumno=c.id_alumno AND b.idactividad=c.idactividad"

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

firefox
Citar            
MensajeEscrito el 26 Sep 2010 01:02 am
Ah me olvidé de decirte que tambien podrias usar el JOIN para hacer la consulta

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

firefox
Citar            
MensajeEscrito el 26 Sep 2010 04:12 am

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 26 Sep 2010 02:07 pm

Inyaka escribió:

bucle_infinito ese SQL que haces puede funcionar, pero no es en lo absoluto correcto.

¿Por qué no es correcto?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 26 Sep 2010 03:49 pm

DriverOp escribió:

Inyaka escribió:

bucle_infinito ese SQL que haces puede funcionar, pero no es en lo absoluto correcto.

¿Por qué no es correcto?.


por que pierdes el control sobre lo que quieres y no quieres mostrar, existe una buena diferencia entre LEFT JOIN e INNER JOIN ademas los campos que unen una tabla pueden ser mas de 1 y se puede diferenciar entro lo que une la tabla y las restricciones que si van en el WHERE

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 27 Sep 2010 05:59 am
Gracias por sus respuestas...
no se si no me he explicado bien...la sentencia--->

SELECT
alumnos.IDALUMNOS,
alumnos.APELLIDO1,
alumnos.APELLIDO2,
alumnos.NOMBRE1,
alumnos.NOMBRE2,
actividades.IDACTIVIDADES,
actividades.DESCRIPCION,
alumnoactividad.NOTA
FROM
alumnoactividad alumnoactividad
INNER JOIN actividades actividades
ON alumnoactividad.IDACTIVIDAD = actividades.IDACTIVIDADES
INNER JOIN alumnos alumnos
ON alumnoactividad.IDALUMNOS = alumnos.IDALUMNOS

-->solo me genera los alumnos que tienen una actividad calificada...yo deseo mostrar ademas los alumnos que no tienen actividades calificadas...ejemplo

nombres descricion calificacion
luis taller 3,2 <-->estos registros los genera la consulta arriba mencionada<--->
luis tareas null <--->estos son los registros que quiero tambien<--->
pedro tareas 3,1<-->estos registros los genera la consulta arriba mencionada<--->
pedro taller null<--->estos son los registros que quiero tambien<--->

parceros me gustaria saber lo que quiero es posible...Gracias

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 27 Sep 2010 01:41 pm
necesitas usar LEFT JOIN en ves de INNER JOIN en la tabla actividades (creo que es esa)

por cierto ¿para que usas el mismo nombre de la tabla como alias? seria mas comodo usar 1 o 2 letras

Código MySQL :

SELECT 
* -- etc...
FROM
alumnoactividad a
LEFT JOIN actividades ac
ON a.IDACTIVIDAD = ac.IDACTIVIDADES
INNER JOIN alumnos al
ON a.IDALUMNOS = al.IDALUMNOS

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 27 Sep 2010 02:05 pm

Inyaka escribió:

DriverOp escribió:

Inyaka escribió:

bucle_infinito ese SQL que haces puede funcionar, pero no es en lo absoluto correcto.

¿Por qué no es correcto?.


por que pierdes el control sobre lo que quieres y no quieres mostrar, existe una buena diferencia entre LEFT JOIN e INNER JOIN ademas los campos que unen una tabla pueden ser mas de 1 y se puede diferenciar entro lo que une la tabla y las restricciones que si van en el WHERE

Pues no veo dónde se pierde el control que comentas, la verdad...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Sep 2010 02:18 pm

DriverOp escribió:

Inyaka escribió:

DriverOp escribió:

Inyaka escribió:

bucle_infinito ese SQL que haces puede funcionar, pero no es en lo absoluto correcto.

¿Por qué no es correcto?.


por que pierdes el control sobre lo que quieres y no quieres mostrar, existe una buena diferencia entre LEFT JOIN e INNER JOIN ademas los campos que unen una tabla pueden ser mas de 1 y se puede diferenciar entro lo que une la tabla y las restricciones que si van en el WHERE

Pues no veo dónde se pierde el control que comentas, la verdad...


la solución tremendamente sencilla que acabo de plantear se debe al control sobre la consulta, estudia lo que te acabo de decir y no seas porfiado XD

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 27 Sep 2010 03:40 pm
Pues lo siento, sigo sin ver dónde se pierde el control de lo que quieras o no quieras mostrar.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Sep 2010 07:59 pm

bucle_infinito escribió:


Código PHP :

$sql = "SELECT nombre, descripcion, nota 
          FROM (alumnos a, actividades b, alumnos_actividades c)
          WHERE a.idalumno=c.id_alumno AND b.idactividad=c.idactividad"


si quisieras listar a los alumnos con y sin actividades ¿como lo harías?
¡FACIL! usando LEFT JOIN en ves de INNER JOIN al unir la tabla alumnos_actividades!

oops cierto que no usas JOIN U_U

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.