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

Ayuda con Consulta MYSQL

Estas en el tema de Ayuda con Consulta MYSQL en el foro de Mysql en Foros del Web. ya llevo varias horas dandole vueltas al asunto y no logro hacerla funcionar tengo que relacionar 3 tablas pensa materias notas la tabla "pensa" tiene ...
  #1 (permalink)  
Antiguo 15/07/2010, 20:25
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Ayuda con Consulta MYSQL

ya llevo varias horas dandole vueltas al asunto y no logro hacerla funcionar

tengo que relacionar 3 tablas
  • pensa
  • materias
  • notas

la tabla "pensa" tiene estos campos
cod_pen - cod_mat - cod_comp - semestre - orden


la tabla "materias" tiene estos campos
cod_comp - descrip2 - creditos


la tabla "notas" tiene estos campos
codigo - cod_comp - cod_mat - nota - lapso - tiplap


yo tengo en unas variables
$estudia2 = cod_pen que sirve en la tabla pensa
$codigo = codigo que sirve en la tabla notas


necesito mostrar los siguientes campos:
pensa.cod_mat, materias.descrip2, pensa.semestre, materias.creditos, notas.nota, notas.lapso, notas.tiplap


el mayor problema es que en la tabla "pensa" aparecen los datos sin duplicados, pero en la tabla "notas" se pueden repetir de manera indefinida

yo necesito que se muestren los datos completos de pensa y solo el ultimo registro que aparezca en notas que coincida con cod_comp de la tabla pensa


ojala me puedan entender sino me avisan a ver como les explico mejor
  #2 (permalink)  
Antiguo 16/07/2010, 09:16
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

sera que nadie tiene idea de como es, yo lo coloco asi a ver y nada


$resultado2= mysql_query("SELECT DISTINCT notas.cod_mat, pensa.cod_mat, materias.descrip2, pensa.semestre, materias.creditos, notas.nota, notas.lapso, notas.tiplap FROM notas, pensa, materias
where notas.codigo = 222 and notas.cod_comp = pensa.cod_comp and notas.cod_comp = materias.cod_comp",$link) or die("Error:<br>".mysql_error());


y me muestra el siguiente error:

The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay


les agradezco que me ayuden, que estoy parado por esa consulta
  #3 (permalink)  
Antiguo 16/07/2010, 09:39
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: Ayuda con Consulta MYSQL

Empieza por describir qué estás modelando, porque un nombre como "PENSA" resulta totalmente inentendible. No sabemos a qué se refiere, por lo que no quweda claro qué relación con "Notas" o "Materias".
Pareciera que estás tratando de modelar algún tipo de reporte de calificaciones de una institución educativa, pero no me queda claro, como dije, lo que representa...

Piensa que para que sea comprensible, el tipo de sistema educativo tiene que ser entendido por todos... y yo jamás he visto ni cursado nada con "créditos", o conocido una instancia "pensa", o hablado de "lapso" en contextos de enseñanza.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/07/2010, 11:20
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

bueno si es una institución educativa la tabla pensa tiene dentro todas las materias que se dan por cada carrera por ejemplo


cod_pen - cod_mat - cod_comp - semestre - orden
EXA - E1AA - 1 - 1 - 3
EXA - E1BA - 2 - 1 - 4
EXA - E1CA - 3 - 1 - 5


en la tabla materias
cod_comp - descrip2 - creditos
1 - Educ. Fisica - 2
2 - Proyecto Ambientall - 3
3 - Ingles - 2


en la tabla notas

codigo - cod_comp - cod_mat - nota - lapso - tiplap
123 - 1 - E1AA01 - 08 - 2009-1 - R
123 - 1 - E1AA02 - 12 - 2009-2 - R
123 - 2 - E1BA04 - 08 - 2009-2 - R

asi mas o menos van las tablas lo que quiero es realizar un historial academico, que me muestre todas las materias que aparecen en pensa, segun cod_pen que lo tengo en una variable, y me muestre la de notas que sean = o mayores a 10

necesito mostrar lo siguiente

pensa.cod_mat, materias.descrip2, pensa.semestre, materias.creditos, notas.nota, notas.lapso, notas.tiplap
  #5 (permalink)  
Antiguo 16/07/2010, 13:27
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

por lo menos que alguien me indique donde puedo conseguir una pagina que expliquen bien cada una de las consultas que se pueden hacer con MYSQL y que coloque ejemplo practicos, para yo ir leyendo y ver si lo puedo hacer
  #6 (permalink)  
Antiguo 16/07/2010, 13:35
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: Ayuda con Consulta MYSQL

Tienes que tener paciencia. No trabajamos en un servicio on-line, sino que participamos del foro de acuerdo al tiempo libre que poseemos cada uno.
A veces pasa tiempo hasta que uno de nosotros puede responder.
Yo, por ejemplo, estoy trabajando en el área de Desarrollo, con cuatro cámaras mirándome.... ¿Te imaginas lo que pasaría si ven que no estoy haciendo lo que debo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 16/07/2010, 13:42
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes que tener paciencia. No trabajamos en un servicio on-line, sino que participamos del foro de acuerdo al tiempo libre que poseemos cada uno.
A veces pasa tiempo hasta que uno de nosotros puede responder.
Yo, por ejemplo, estoy trabajando en el área de Desarrollo, con cuatro cámaras mirándome.... ¿Te imaginas lo que pasaría si ven que no estoy haciendo lo que debo?
jejeje yo se que es asi, pero estoy frustrado por no poder hacer la bendita consulta, y se que a lo que la vea, dire

porque no pense en eso antes.

bueno ojala sea como tu dices y alguien tenga de verdad la respuesta.

saludos
  #8 (permalink)  
Antiguo 16/07/2010, 13:56
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: Ayuda con Consulta MYSQL

Pregunta:
¿Por qué en la tabla NOTAS, el código de materia aparece así?:
Cita:
E1AA01
E1AA02
E1BA04
si en MATERIAS es
Cita:
E1AA
E1AA
E1BA
Eso genera inconsistencia de datos... y dificulta la consulta si no sabemos de dónde provienen esos dígitos adicionales y qué representan.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 16/07/2010, 14:04
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

porque en la parte de notas te muestra el código de la materia junto con la sección donde la vio el alumno.

pero yo a mi forma de ver las cosas se debe relacionar las tablas con el campo cod_comp, que para las 3 tablas son iguales
  #10 (permalink)  
Antiguo 16/07/2010, 14:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Ayuda con Consulta MYSQL

amigo johhan16 tu respues a tu problema es:

tu consulta:

SELECT DISTINCT notas.cod_mat, pensa.cod_mat, materias.descrip2, pensa.semestre, materias.creditos, notas.nota, notas.lapso, notas.tiplap FROM notas, pensa, materias
where notas.codigo = 222 and notas.cod_comp = pensa.cod_comp and notas.cod_comp = materias.cod_comp

consulta ejemplo pero todabia falta conocer la estructura de tus 3 tablas para saber cuales con los ID o campos que vas a relacionar entre tablas

SELECT A.nombres,B.cod_mat, Cdescrip2
FROM notas A
LEFT JOIN pensa B
ON A.id=B.id
LEFT JOIN materias C
ON A.id=C.id
WHERE A.codigo=222
AND A.cod_comp=3434
AND A.cod_comp;


saludos
  #11 (permalink)  
Antiguo 16/07/2010, 15:57
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: Ayuda con Consulta MYSQL

Esto es mas o menos lo que tienes:

Tiene dos problemas:
1) No se sabe de dónde surge cod_mat ni lo que representa.
2) Para hacer un JOIN entre pensa y notas hay que usar una función de caracteres para extraer la PK de pensa, ya que tal y como está es inconsistente.
Ese tipo de cosas no se debe hacer. En todo caso si se requiere que además de ese código, contenga la relación con el sitio (sección) donde se puso esa nota, hay que extender el modelo:

Con este modelo ya podemos crear una consulta consistente:

Código MySQL:
Ver original
  1.     P.cod_mat, M.descrip, S.semestre, M.creditos, N.nota, N.lapso, N.tiplap
  2. FROM pensa P
  3.     INNER JOIN materia M ON P.cod_comp = M.cod_comp
  4.     LEFT JOIN notas N ON N.cod_pensa = P.cod_pensa
  5.     INNER JOIN seccion S ON N.seccion_id = S.seccion_id;
Ahora bien, yo a esto le veo un problema: çLas notas son propiedad o pertenecen al cursante, no al plan o programa de cursada (que es lo que parece representar pensa), por lo que esta consulta generaría una repetición de registros por cada nota.
SI lo que quieres es poner las materias dadas en un semestre, esta consulta no requiere cruzar la tabla de notas, como no sea para saber la sección a la que pertenece esa cursada.

Eso sería:
Código MySQL:
Ver original
  1.     P.cod_pensa, S.seccion_id, P.cod_mat, M.descrip, S.semestre, M.creditos, N.lapso, N.tiplap
  2. FROM pensa P
  3.     INNER JOIN materia M ON P.cod_comp = M.cod_comp
  4.     LEFT JOIN notas N ON N.cod_pensa = P.cod_pensa
  5.     INNER JOIN seccion S ON N.seccion_id = S.seccion_id;



Nota importante:
Cita:
pero yo a mi forma de ver las cosas se debe relacionar las tablas con el campo cod_comp, que para las 3 tablas son iguales
Las relaciones no se establecen entre las entidades porque parezcan estar relacionadas, sino porque realmente exista una relación.
¿Modelaste con alguna herramienta gráfica antes de construir las tablas?, si es así, postea lo que hiciste para ver bien esas relaciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 16/07/2010, 15:57
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

coloque esto y me dio error, y con respecto a lo que dices del id ninguna tabla lo trae, lo unico que traen para poderse relacionar es cod_comp

Cita:
Iniciado por teloxzak Ver Mensaje

SELECT DISTINCT notas.cod_mat, pensa.cod_mat, materias.descrip2, pensa.semestre, materias.creditos, notas.nota, notas.lapso, notas.tiplap FROM notas, pensa, materias
where notas.codigo = 222 and notas.cod_comp = pensa.cod_comp and notas.cod_comp = materias.cod_comp
  #13 (permalink)  
Antiguo 16/07/2010, 16:02
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje

Ahora bien, yo a esto le veo un problema: çLas notas son propiedad o pertenecen al cursante, no al plan o programa de cursada (que es lo que parece representar pensa), por lo que esta consulta generaría una repetición de registros por cada nota.
SI lo que quieres es poner las materias dadas en un semestre, esta consulta no requiere cruzar la tabla de notas, como no sea para saber la sección a la que pertenece esa cursada.

¿Modelaste con alguna herramienta gráfica antes de construir las tablas?, si es así, postea lo que hiciste para ver bien esas relaciones.
lo que quiero es exactamente lo que dices, mostrar todas las materias que se dan por cada semestre y colocarle a que semestre pertenece, y que nota tiene el alumno

por cierto que herrmienta puedo usar para graficar como tu dices
  #14 (permalink)  
Antiguo 16/07/2010, 17:11
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Ayuda con Consulta MYSQL

bueno ya logre lo que queria, aunque nose si fue de la mejor manera

primero hice esta consulta

SELECT * FROM pensa, materias where pensa.cod_pen = ('$estudia2') and pensa.cod_comp = materias.cod_comp

luego dentro de un while que muestra ese resultado coloque
$pcod_comp = $resultados['cod_comp'];
$resultado4= mysql_query("SELECT * FROM notas where notas.cod_comp = ('$pcod_comp') and notas.codigo = ('$codigo') order by notas.lapso desc",$link);

y me funciono de maravilla.

gracias a todos por la ayuda prestada, y si creen que hay una forma mejor de hacerlo me avisan

gnzsoloyo si puedes me dices que programa utilizo para graficar y para una proxima oportunidad detallar mejor el problema

edito: ahora solo me falta mostrar cuantas veces ha visto x materia el alumno, se que es con un count, pero no se como aplicarlo

Última edición por johhan16; 16/07/2010 a las 17:24
  #15 (permalink)  
Antiguo 16/07/2010, 17:38
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: Ayuda con Consulta MYSQL

- MySQL WorkBench
- DBDesigner 4
- ERWin Data Modeller
- Enterprise Architect
- Muuuuchos otros.
__________________
¿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: Ninguno
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 16:36.