Título: Ayuda con Consulta. Publicado por: royerphpmysql en 19 Marzo 2010, 22:16 pm buenas tardes.
alguien me pudiera ayudar. tengo una base de datos y 2 tablas alumnos, kardex, y ambos se relacionan por matricula. donde la tabla kardex lleva un codigo de materia y una calificacion. realizo una consulta general y me esta arrojando varias veces la matricula y el nombre anexo Matricula Nombre Carrera Fecha de Calificacion Materia Calificacion 91901014429 ALMAZA MAURICIO TECNICOs 07/02/2010 M11 90 91901014429 ALMAZA MAURICIO TECNICOs 05/05/2010 M13 80 91901014429 ALMAZA MAURICIO TECNICOs 07/02/2010 M12 90 91901014429 ALMAZA MAURICIO TECNICOs 05/05/2010 M14 80 como le hago para que en la consulta no me repita la matricula y aparezcan los datos de materia y calificacion ? saludos y muchas gracias en espera de su pronta respuesta Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 19 Marzo 2010, 23:16 pm Has lo siguiente:
DESCRIBE alumnos; DESCRIBE kardex; SELECT * FROM alumnos LIMIT 1; SELECT * FROM kardex LIMIT 1; Nos muestras exactamente todo lo que devolvió cada una de esas 4 consultas. (por separado) Luego nos muestras la consulta que estas utilizando para mostrar datos. PD.: Podrias agrupar datos, con GROUP BY, para que devuelva 1 valor por matricula.. Pero puede que no salga bien... Es mejor que nos muestres bien como es la base de datos, así podemos responderte Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 19 Marzo 2010, 23:46 pm mysql> DESCRIBE alumnos;
+--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | matricula | bigint(14) | NO | | NULL | | | nombres | varchar(50) | NO | | NULL | | | apellidos | varchar(50) | NO | | NULL | | | carrera | varchar(40) | NO | | NULL | | | fechaingreso | date | NO | | NULL | | | turno | varchar(20) | NO | | NULL | | | grupo | varchar(5) | NO | | NULL | | | salon | int(11) | NO | | NULL | | +--------------+-------------+------+-----+---------+----------------+ 9 rows in set (0.00 sec) mysql> DESCRIBE kardex; +-------------------+---------------------+------+-----+---------+-------------- --+ | Field | Type | Null | Key | Default | Extra | +-------------------+---------------------+------+-----+---------+-------------- --+ | id | int(10) unsigned | NO | PRI | NULL | auto_incremen t | | matricula | bigint(14) unsigned | NO | | NULL | | | tetramestre | int(10) unsigned | NO | | NULL | | | materia | varchar(45) | NO | | NULL | | | codigomateria | varchar(10) | NO | | NULL | | | catedratico | varchar(80) | NO | | NULL | | | codigocatedratico | varchar(10) | NO | | NULL | | | calif1A | int(10) unsigned | NO | | NULL | | | fechacalif | varchar(10) | NO | | NULL | | | calif2A | int(10) unsigned | YES | | NULL | | | fechasegundaop | varchar(10) | YES | | NULL | | | califrevalidacion | int(10) unsigned | YES | | NULL | | | fechasegopesp | varchar(10) | YES | | NULL | | | califrecuperacion | int(10) unsigned | YES | | NULL | | | fechacalifrec | varchar(10) | YES | | NULL | | | califespecial | int(10) unsigned | YES | | NULL | | | fechacalifesp | varchar(10) | YES | | NULL | | +-------------------+---------------------+------+-----+---------+-------------- --+ 17 rows in set (0.00 sec) la idea mia es que solo me muestre de la tabla alumnos la matricula y el nombre y de la tabla kardex el codigo de materia y la calificacion, la consulta yo la estoy realizando de la siguiente manera. select * from alumnos, kardex where alumnos.matricula = kardex.matricula pero este me arroja el resultado que pegue al prinicio osea todo. espero me ayuden gracias. Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 00:09 am A ver... para mostrar solo matricula y nombre, debes hacer:
SELECT alumnos.nombre, alumnos.matricula Si quieres que tambien devuelva el Codigo de materia y calificacion, tienes que agregar: kardex.matricula, kardex.calificacion o sea, que va quedando así: SELECT alumnos.nombre, alumnos.matricula, kardex.matricula, kardex.calificacion Luego si quieres vincular las tablas mediante la matricula, entonces le agregas: WHERE alumnos.matricula = kardex.matricula O sea que quedaría así: SELECT alumnos.nombre, alumnos.matricula, kardex.matricula, kardex.calificacion WHERE alumnos.matricula = kardex.matricula Prueba eso, y dinos si hay problemas Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 00:31 am bueno creo qeu alomejor no me explique.. perdon.
como le hago para listar de la matricula xxxxxxxx todas las calificaciones distintas que este tenga en la tabla kardex? te anexo lo que vi con GROUP BY y con los query que me diste de ejemplo. en el siguiente ejemplo yo llamo la matricula xxxxxxxxx pero no quiero que me despliege la matricula tantas veces solo quiero ver los codigos de materia que traen xxxxxxxx matricula con sus respectivas calificaciones, no se si se pueda en SQL o tenga que ser en codigo PHP ? mysql> SELECT alumnos.nombres, kardex.matricula, kardex.codigomateria, kardex.calif1A FROM alumnos, kardex WHERE alumnos.matricula = kardex.matricula GROUP BY codigomateria; +------------------+-------------+---------------+---------+ | nombres | matricula | codigomateria | calif1A | +------------------+-------------+---------------+---------+ | ALMANZA MAURICIO | 91901014429 | M10 | 80 | | ALMANZA MAURICIO | 91901014429 | M11 | 90 | | ALMANZA MAURICIO | 91901014429 | M12 | 69 | +------------------+-------------+---------------+---------+ 3 rows in set (0.00 sec) a mi me gustaria desplegarlo asi.. +------------------+-------------+---------------+---------+ | nombres | matricula | codigomateria | calif1A | +------------------+-------------+---------------+---------+ | ALMANZA MAURICIO | 91901014429 | M10 | 80 | | | M11 | 90 | | | M12 | 69 | +------------------+-------------+---------------+---------+ no se si me explique... reciban muchos saludos y gracias por su valiosa ayuda. Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 20 Marzo 2010, 00:42 am Citar +------------------+-------------+---------------+---------+ | nombres | matricula | codigomateria | calif1A | +------------------+-------------+---------------+---------+ | ALMANZA MAURICIO | 91901014429 | M10 | 80 | | | M11 | 90 | | | M12 | 69 | +------------------+-------------+---------------+---------+ Asi de antemano no lo puedes desplegar :xD lamentablemente existe una relacion que quieres violar. El alumno Almanza Mauricio tiene 3 calificaciones, literalmente no puedes romper esa relacion y solo mostrar 1 solo campo y sus 3 relaciones o existe o no existe pero hay una relacion existente en la estructura. Y si matricula = xxxx dice que le pertenece a Mauricio y Mauricio tiene 10 calificaciones guardadas, retornaran las 10 calificaciones y todos los demas campos que lo acompanen. O es o no es, ahora mediante PHP si podrias filtrar y ordenar la data resultante y mostrar solo lo que tu quieres y como tu lo quieres... Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 00:45 am Podria solucionarce con un RIGHT JOIN...
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 00:48 am TIFA, Skelektron muchas gracias por su apoyo, probare con ambas modalidades que me recomiendan lo revisare mientras ire por cigarros y che e a la tienda para seguir trabajando agusto con ustedes... saludos ;)
Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 20 Marzo 2010, 00:49 am Citar Podria solucionarce con un RIGHT JOIN... Quisiera ;) pero el RIGHT JOIN y el LEFT JOIN lo que retorna es la otra data de la otra tabla donde sobran campos o existen mas campos que la tabla consultada primera. :xD no se entiende lo se... Un ejemplo rapido, tengo dos tablas: Tabla1 nombres Tabla2 apellidos Suponte que Tabla1 tiene 20 registros , digase 20 nombres, y tabla2 tiene 15 apellidos... :P y tu quieres ver todos los registros de la tabla1 pero haces un join con tabla2 que tiene menos :( entonces haces un RIGHT o LEFT join a la tabla1 depende su ubicacion si primera o segunda :xD y ahi retorna lo que buscas... pero en el caso del amigo en cuestion, creo que ya los registros estan totalmente filtrados como caen... Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 01:08 am otravez muchas gracias TIFA me tendre que ir al foro de PHP jajaja sludos
Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 01:16 am Citar Podria solucionarce con un RIGHT JOIN... Quisiera ;) pero el RIGHT JOIN y el LEFT JOIN lo que retorna es la otra data de la otra tabla donde sobran campos o existen mas campos que la tabla consultada primera. :xD no se entiende lo se... Un ejemplo rapido, tengo dos tablas: Tabla1 nombres Tabla2 apellidos Suponte que Tabla1 tiene 20 registros , digase 20 nombres, y tabla2 tiene 15 apellidos... :P y tu quieres ver todos los registros de la tabla1 pero haces un join con tabla2 que tiene menos :( entonces haces un RIGHT o LEFT join a la tabla1 depende su ubicacion si primera o segunda :xD y ahi retorna lo que buscas... pero en el caso del amigo en cuestion, creo que ya los registros estan totalmente filtrados como caen... Si hace un: alumnos rigth join materias Se mostrarán todas las entradas en MATERIAS, con su respectivo alumno. Luego con un GROUP BY matricula, se soluciona todo.. Tio, prueba ésto: SELECT alumnos.nombres, kardex.matricula, kardex.codigomateria, kardex.calif1A FROM alumnos NATURAL RIGHT JOIN GROUP BY matricula; Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 01:27 am Código
El problema de ahí esta en que no muestra todas las entradas MATRICULA... Entonces no tendría que hacer el GROUP BY... Tu tio, lo que quieres ahcer, es mostrar todas las matriculas de la tabla extraña, y con el nombre y apellido del responzable de esa calificacion? Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 01:33 am mmm entonces tendria que modificar la estructura de las tablas.
en la tabla kardex se van alimentando las materias con sus calificaciones. la tabla kardex esta ligada por medio de la matricula con la de alumnos. cuando doy de alta una calificacion esta se almacena en tabla kardex con numero de matricula, codigo materia y su respectiva calificacion. donde consulto quiero mostrar solo una vez la matricula pero sus diferentes calificaciones en sus respectivas codigomateria. espero explicarme saludos Título: Re: Ayuda con Consulta. Publicado por: seba123neo en 20 Marzo 2010, 01:47 am pienso lo mismo que te dijo ^TiFa^ , no podes hacer que te traiga 1 sola vez la matricula y a la vez todas las calificaciones que tenga...es un contradiccion...es como estar omitiendo campos de una columna y no de otras...y un group by no serviria porque si son de diferentes ¿ fechas y materias ? vos lo deberias mostrar igual.
¿¿ que problema hay con que te muestre la matricula siempre ?? yo no le veo problema...capas estas haciendo mal el planteo de donde queres mostrar eso...por eso pregunto..donde vas a mostrar esos datos..en que estas programando ?? saludos. Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 20 Marzo 2010, 01:48 am Por eso te decia desde un inicio Skeletron ;) no se podia de la manera que el lo desea ;) no lo tomes como un reclamo :rolleyes:
Porque mejor Skeletron, no le haces una especie de script en PHP donde, capte todos los resultados de una consulta con GROUP BY y pos... divida las cadenas y solo muestre la primera cadena de registros completas, y el resto pues solo muestre el 3 registro por ejemplo???? Mediante scripts lo que el pide se puede organizar, mediante procedimientos almacenados podria ser igual.. pero con 1 sola consulta SQL aun no lo considero posible :rolleyes: Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 01:55 am :-( sip creo que MYSQL esta bien la consulta
SELECT alumnos.nombres, kardex.matricula, kardex.codigomateria, kardex.calif1A FROM alumnos, kardex WHERE alumnos.matricula = kardex.matricula GROUP BY codigomateria donde el resultado es este. +------------------+-------------+---------------+---------+ | nombres | matricula | codigomateria | calif1A | +------------------+-------------+---------------+---------+ | ALMANZA MAURICIO | 91901014429 | M10 | 80 | | ALMANZA MAURICIO | 91901014429 | M11 | 90 | | ALMANZA MAURICIO | 91901014429 | M12 | 69 | | ALMANZA MAURICIO | 91901014429 | M13 | 78 | +------------------+-------------+---------------+---------+ como lo digo nuestra amiga TIFA no se puede violar la orden del resultado solo hay que realizar un buen SCRIPT en PHP para qeu me omita las ultimas 3 lineas de nombres y matriculas y solo muestre todas las materias y calificaciones. THANKS... si estuvieran aqui les invitara unas cheves a todos jaja Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 02:13 am No es tan dificil...
Código
Dime si te funcionó.. Que lo hice aca sin ningun IDE Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 02:15 am Si no entiendes el codigo, me dices y te lo explico paso por paso
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 02:30 am mmm suena que si va funcionar pero por lo pronto me mando error de sintaxis con el echo.. dejame ver.. quiza le falte algo. lo copie tal cual lo pusiste..
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 02:39 am <?PHP
// Conectar con el servidor de base de datos $conexion = mysql_connect ("localhost", "root", "root") or die ("No se puede conectar con el servidor"); // Seleccionar base de datos mysql_select_db ("escuela") or die ("No se puede seleccionar la base de datos"); $res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria FROM alumnos, kardex WHERE kardex.matricula=alumnos.matricula"); $row=mysql_fetch_array($res) //hago esto, para poder tomar el nombre antes de entrar al WHILE. echo 'El alumno '.$row['apellidos'].' '.$row['nombres'].' de matricula: '.$row[matricula].' obtuvo las siguiente calificaciones:</br>'; while($row=mysql_fetch_array($res)){ echo 'Codigo de Materia: '.$row['codigomateria'].' | Calificacion: '.$row['calif1A'].'</br>'; } echo "<ul> </ul>"; echo "<td><div align=left><a href=entra.php>Retornar al Menú Principal</a></div></td>"; } else print ("No hay noticias disponibles"); // Cerrar conexión mysql_close ($conexion); ?> me marca esto. Parse error: syntax error, unexpected T_ECHO in C:\AppServ\www\alumnos\consultasola.php on line 30 Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 02:56 am El alumno ALMANZA MAURICIO de matricula: 91901014429 obtuvo las siguiente calificaciones:
Codigo de Materia: M12 | Calificacion: 70 Codigo de Materia: M11 | Calificacion: 90 Codigo de Materia: M10 | Calificacion: 80 Codigo de Materia: M10 | Calificacion: 90 jajajajajajajjaa ya jaloooooooo gracias a todosss los quieroooo Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 20 Marzo 2010, 03:13 am Gracias a Skeletron por aportar codigo funcional ;) ;) ;)
Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 03:19 am Perfecto tio...
Cualquier otra cosita, grita! :) Cya!! Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 05:04 am Skeletron tengo otra bronca D: D: espeor no te molestes.
fijate que quiero filtrar la consulta por matricula y hago una pregunta asi. <form action="consultasola.php" method="post"> <div align="left"> <h1 align="center">Consulta de Calificaciones</h1> <p> <br> Matricula del Alumno: <input name="matricula" type="text" id="matricula" size="17"> <input type=submit name="Buscar" value="Buscar"> </p> </div> <td><div align="center"> <h3><a href="entra.php">Retornar al Menú Principal </a></h3> <p> </p> <p>Tarea Sistema de Administracion de Alumnos</p> </div> </form> y el otro programa qe se llama consultasola.php est asi // Conectar con el servidor de base de datos $conexion = mysql_connect ("localhost", "root", "root") or die ("No se puede conectar con el servidor"); // Seleccionar base de datos mysql_select_db ("escuela") or die ("No se puede seleccionar la base de datos"); // Obtener datos $matricula= $_REQUEST['matricula']; <---------aqui tambien utilice el GET y me sigue mostrando el resultado anterior, le puse el POST y tampoco me lo aceptal $res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria FROM alumnos, kardex WHERE kardex.matricula=alumnos.matricula"); $row=mysql_fetch_array($res); //hago esto, para poder tomar el nombre antes de entrar al WHILE. echo "El alumno ".$row['nombres']." ".$row['apellidos']." y con Matricula: ".$row[matricula]." obtuvo las siguientes calificaciones:</br>"; while($row=mysql_fetch_array($res)){ echo "Materia: ".$row['codigomateria']." | Calificacion: ".$row['calif1A']."</br>"; } echo "<ul> </ul>"; echo "<ul> </ul>"; echo "<td><div align=left><a href=entra.php>Retornar al Menú Principal</a></div></td>"; no me acepta leer una variable de afuera. Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 05:19 am le puse el trim
trim ($matricula); if (!$matricula || !$matricula) { echo "Campo de búsqueda vacío . Inténtalo de nuevo. "; exit; pero no me funciono nomas me sale la primer matricula Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 14:57 pm Bien tio... Por lo que vemos, te falta mucho de PHP.. Pero no te preocupes.. PHP es facil de aprender.. Si sigues tocando mucho, aprenderas rapido..
La primer pagina esta perfecta.. Pero la 2º (la de la consulta) esta mal.. SI lo que tu quieres, es filtrar las consultas por una matricula especifica, entonces, los cambios no tienen que ser en el codigo, sino, solamente en la consulta SQL... Tu tienes ésto: Código
Primero, borra: $_REQUEST['matricula'] <<<< no es necesario Y luego, hay que hacer los cambios en el SQL... Si esa consulta devuelve todas las matriculas por alumnos, simplemente le tienes que agregar al WHERE, lo siguiente: AND alumno.matricula=".$_POST['matricula'] Para que quede así: Código
OJO... Supongamos que alguien, en el campo de MATRICULA, en vez de escribir un numero de matricula, escribe un codigo SQL... Por ejemplo: '' UNION XXXXXXXXXXXXXXXXXX La consulta SQL se trasformaría a un ataque contra tu base de datos... Tienes que leer en que consiste el ataque: SQL INYECTION. Una vez que entiendas como es, y en que consiste (que es MUY FACIL DE ENTENDER), querras saber como se evita ese tipo de ataques, y es muy facil: Agrega a cada variable que coloques dentro de la sentencia SQL, lo siguiente: mysql_real_escape_string() Para que quede así: Código
Y tio... ahora que lo pienso: El primer codigo que te dí de PHP, ese funcionaba cuando solo habia 1 alumnos en tu base de datos... ya que tampoco filtrabamos nombrs de alumnos,, ni nada de eso... Y efectivamente, éste es el codigo correcto ;) Un placer ayduarte.. Si el codigo no te funciona, o sigues teniendo dudas, tu sigue preguntando Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 17:30 pm que onda amigo.
quedo asi. $res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria, kardex.fechacalif FROM alumnos INNER JOIN kardex ON kardex.matricula=alumnos.matricula WHERE alumnos.matricula = $matricula"); donde desde otro formulaio pregunt por la matricula. y ya me da la matricula queyo quiero.. efectivamente me falta mas en php y mysql y aqui aprendere mucho con ustedes, muchas gracias ahora lo que voy a hacer es acomodr los echo en una tabla o determinada parte con un formato. Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 17:43 pm no viene adjunto el codigo de las 2 post anteriores tuyos.
Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 20:35 pm Mira, ese codigo que te di ultimo, es lo que debes reemplazarle a todo el codigo anterior, para que funcione bien POR MATRICULA...
Entiendes? Tu ingresas la matricula en la pagina xxx.php la cual tiene un form que dirije a yyy.php.. en yyy.php tienes que tener lo anterior, ese while($row=....) que te he dado, en reemplazar la cadena mysql_query() por lo que te dí ahí... Digamos que tiene que quedar así: Código
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 20:51 pm yessss muchas gracias señor ya pude...
Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 21:23 pm Perfecto...
Entendes bien el codigo? o queres que te lo explique (así aprendes un poquito mas de php) Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 21:35 pm si si le entendi bien muchas gracias, ahora lo que quiero es darle formato en una especie de tabla, no se si me explique.
lo puse asi.. Consulta Calificaciones de Alumnos El alumno CELINA NINFA GUERRA y con Matricula: 91901014428 obtuvo las siguientes calificaciones: Materia Calificacion Fecha de Calificacion M10 90 01/01/2010 M12 90 01/01/2010 M13 90 01/01/2010 pero me gustaria ponerlo asi. ando investigando la opcion de tabla El Alumno CELIA NINFA GUERRA y con Matricula: 91901014428 obtuvo las siguientes calificaciones: fecha de aplicacion Materia M10 M12 M13 01/01/2010 Calificacion 90 90 90 01/02/2010 por ejemplo. saludos Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 21:50 pm Tambien es facil...
Cada "RENGLON" en HTML, se delimita con: <tr> Y cada TROZO DEL RENGLON (o celda) se delimita con <td> Se supone que debes tener un RENGLON por cada entrada, y a cada dato lo debes tener en una CELDA.. Entonces, se torna facil: Código
Lo pruebas y dices si funcionó Si no sabes como agregarle FECHA DE CALIFICACION, me dices, y modifico éste mismo post con el agregado Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 22:07 pm de echo ya lo habia echo con el print
echo "<td><div align=left>El alumno ".$row['nombres']." ".$row['apellidos']." y con Matricula: ".$row[matricula]." obtuvo las siguientes calificaciones:</a></div></td></br>"; while($row=mysql_fetch_array($res)){ print ("<TABLE>\n"); print ("<TH>Materia</TH>\n"); print ("<TH>Calificacion</TH>\n"); print ("<TH>Fecha de Calificacion</TH>\n"); print ("</TR>\n"); print ("<TR>\n"); print ("<TD>" . $row['codigomateria'] . "</TD>\n"); print ("<TD>" . $row['calif1A'] . "</TD>\n"); print ("<TD>" . $row['fechacalif'] . "</TD>\n"); } print ("</TABLE>\n"); y jalo tambien, pregunta. se le puede hacer que cierto dato que venga por ejemplo M10 que corresponde a una materia despliege el nombre actual? tendria que manejar un IF ? dentro ...? IF $materia = M10, entonces print texto? Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 22:11 pm Desplegar?..
Quieres decir que en vez de aparecer M10, que aparezca el nombre original de la materia? Si, puede ser, y con IF... Tambien tendrás que traer a materias.nombre, para ver: SI ES M10, imprimir NOMBRE Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 22:21 pm mmmm ok en la tabla kardex tengo un campo que se llama materia pero no se esta llenando desde el programa de captura de calificaciones porque tengo unos VALUE que seleccionan la opcion y solo esta almacenandose el codigo de materia
aunque tengo una tabla que se llama materias y se liga por el codigomateria, podre almacenarlas alli y luego las saco de alli vdd? gracias por tu valiosa ayuda.. Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 22:23 pm Si... Has eso.. Has eso con la otra tabla MATERIAS... Liga otra tbala mas :)
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 22:27 pm muchisimas gracias MASTER dejame le echo ganas y hay te informo para si se me atora la carreta, gracias
Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 22:33 pm de nada tio..
Pasate cuando quieras :) Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 23:23 pm oye amigo Skeletron la verdad que ya me perdi en la sentencia de MySQL como le haria para ligar la tabla numero 3, ya hice el programa que caputura las materias con su codigo ligada codigomateria, y se dio de alta los nombres de cada materia con su codigo. osease que use, en tabla materias, codigomateria, materia, codigocatedratico para futuras.. jejejeje
entonces seria asi?? $res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria, kardex.fechacalif FROM alumnos INNER JOIN kardex INNER JOIN materias ON kardex.matricula=alumnos.matricula WHERE alumnos.matricula =".$_POST['matricula']); le agrege un inner join a materias? es correcto? slds Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 20 Marzo 2010, 23:43 pm Entre el SELECT y el FROM, tambien te falta colocar MATERIAS.nombre
Y esos innert join creo que estan mal.. Pero ahora me estoy yendo... luego los miro.. Enviale un mensaje privador a TIFFA par que te responda por aqui Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 20 Marzo 2010, 23:53 pm ok muchas gracias MASTER.... hola TIFFA andas por alli D: gracias por todo el apoyo amigos..
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 21 Marzo 2010, 02:51 am ya di con el query correcto.
$res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.fechacalif, materias.materia FROM alumnos INNER JOIN kardex INNER JOIN materias ON kardex.matricula=alumnos.matricula WHERE alumnos.matricula =".$_POST['matricula']); pero me las muestra repetidas en el script creo qeu tengo que ponerle otro array Título: Re: Ayuda con Consulta. Publicado por: seba123neo en 22 Marzo 2010, 03:10 am ya di con el query correcto. $res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.fechacalif, materias.materia FROM alumnos INNER JOIN kardex INNER JOIN materias ON kardex.matricula=alumnos.matricula WHERE alumnos.matricula =".$_POST['matricula']); pero me las muestra repetidas en el script creo qeu tengo que ponerle otro array si ese "INNER JOIN kardex" no va asi...y yo soy partidario de no poner el nombre de la tabla delante de los campos sino un simple "alias" queda mucho mas claro y entendible y la consulta no se hace tan grande...por ejemplo: Código: SELECT al.nombres, al.apellidos, al.matricula, k.calif1A, k.fechacalif, mat.materia y si podes ordenala queda mucho mas claro al leer..porque te quiero ver con una consulta larga en una linea...imposible de leer... saludos. Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 22 Marzo 2010, 04:28 am muchas gracias seba123neo :xD
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 22 Marzo 2010, 21:50 pm hola amigos nuevamente molestandolos.
cual seria el comando de mysql para poder comparar las 2 tablas. y poder sacar a pantalla el resultado, es decir. si alimente calificaciones de 2 alumnos se agregan a la tabla kardex. en la tabla materia tengo todas las materias. con que comando compararia los datos y sacar a pantalla las materias faltantes? saludos Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 23 Marzo 2010, 03:51 am Sería algo así como un LEFT JOIN que sea NULL..
materias left join kardex on xxxxx where xxxx is null Algo así... Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 23 Marzo 2010, 04:02 am pero eso aplica cuando las materias completas se almacenan en la misma tabla no?
en este caso en la tabla kardex se almacenan solo las amterias qeu se le captura la calificacion y en la tabla materias esta el catalogo de materias con el codigomateria, en kardex tengo codigomateria con materia. no se si me explico. lo que tendria uqe hacer es consultar kardex y materias y comparar los valores de codigo materia en ambos? e imprimir null el que no tenga los mismos valores que tiene la tabla materias? Título: Re: Ayuda con Consulta. Publicado por: seba123neo en 24 Marzo 2010, 02:32 am pero eso aplica cuando las materias completas se almacenan en la misma tabla no? en este caso en la tabla kardex se almacenan solo las amterias qeu se le captura la calificacion y en la tabla materias esta el catalogo de materias con el codigomateria, en kardex tengo codigomateria con materia. no se si me explico. lo que tendria uqe hacer es consultar kardex y materias y comparar los valores de codigo materia en ambos? e imprimir null el que no tenga los mismos valores que tiene la tabla materias? me podrias dar un ejemplo detallado de lo que queres ? o sea un ejemplo de como seria la salida de datos que queres ver... saludos. Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 24 Marzo 2010, 04:11 am es deci. yo consulto esto dandole la matricula.
Pantalla Consulta Calificaciones de Alumnos 2010-03-23 10:08:39 El alumno CELINA NINFA GUERRA con Matricula: 91901014428 tiene las siguientes calificaciones: Materia Calificacion Fecha Calificacion METODOLOGIA DE LA LECTURA 80 01/01/2010 TEXTOS LITERARIOS I 70 01/01/2010 esto se almacena al llenar la calificacion en una tabla llamada kardex. pero tengo una tabla que se llama materias dode esta ultima tiene todas las materias. que necesito hacer para que el resto de las materias que le faltan al alumno aparezcan en blano en el mismo listado... ambas tienen su codigomateria. kardex y maerias.. gracias Título: Re: Ayuda con Consulta. Publicado por: seba123neo en 24 Marzo 2010, 17:45 pm lo que necesitas es usar lo que se llama LEFT OUTER JOIN, busca en internet para mas informacion de lo que hace, pero es simple o sea te hace la relacion y te deja en null los que no tienen relacion, ya que con un INNER JOIN comun no te los devolveria...y el SELECT principal entonces se deberia hacer a la tabla de Materias.
me cree en MySQL 3 tablas, tratando de imitar las tuyas...no le puse todos los campos que vos tenes, solo los principales...despues vos lo adaptas...hice lo siguiente: TABLA MATERIAS Citar codigomateria nombre 1 Matematicas 2 Fisica 3 Quimica 4 Literatura 5 Geografia 6 Etica 7 Filosofia 8 Computacion TABLA ALUMNOS Citar matricula nombre 111 Sebastian 222 Tifa 333 Skeletron TABLA KARDEX Citar matricula codigomateria calificacion 111 1 70 111 2 80 111 3 50 222 1 70 333 2 80 en este caso solo vamos a filtrar los datos del alumno "Sebastian" de matricula "111"...fijate que solo tiene 3 materias calificadas...de 8 que son en total, el SELECT seria asi: Código
y nos retorna: Citar Sebastian Matematicas 70 Sebastian Fisica 80 Sebastian Quimica 50 NULL Literatura NO CALIFICADO NULL Geografia NO CALIFICADO NULL Etica NO CALIFICADO NULL Filosofia NO CALIFICADO NULL Computacion NO CALIFICADO saludos. Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 25 Marzo 2010, 00:42 am muchas gracias por tu ayuda SEBA
voy a revisar este dato FROM materias m porque ya me perdi voy a leer un poco de alias. saludos Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 27 Marzo 2010, 03:50 am Código
Hola Alguien me podria ayudar a descifrar este error. me marca enmedio de estos 2 LEFT OUTER JOIN kardex k ON m.codigomateria = k.codigomateria LEFT OUTER JOIN alumnos a ON k.matricula = a.matricula saludos Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 27 Marzo 2010, 04:30 am (latin1_swedish_ci,IMPLICIT) and (latin1_spanish_ci,IMPLICIT)
Fijate que seguramente estas haciendo una comparacion entre "swendish" y "spanish".. Cambia el COTEJAMIENTO de tu columna.. de la que da error.. Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 27 Marzo 2010, 05:52 am Realmente, la consulta es correcta. Pero, el motor de MySQL ve un problema al querer comparar dos valores (=) codificados con diferente juego de caracteres.
Para darle solucion a tu problema ya que te seguiras topando con el mismo sino lo cortas de raiz... Hay que indicarle a PHP que realize las consultas siempre con un solo juego de caracteres. Haz lo siguiente chico... En tu codigo PHP en la parte donde vayas a trabajar con MySQL edita y haz lo siguiente: Citar <?php @mysql_query("SET collation_connection = latin1_spanish_ci;"); $result=mysql_query("bla bla bla O de paso reiniciar el servidor con ese collation asignado pero nahhh , haz lo anterior dentro de tu PHP :P Título: Re: Ayuda con Consulta. Publicado por: seba123neo en 27 Marzo 2010, 15:09 pm si, SQL Server hace lo mismo cuando queres hacer una relacion con 2 tablas de colaciones distintas, ya me ha pasado, se la cambias y listo el pollo...
saludos. Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 28 Marzo 2010, 00:19 am Código
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource saben a que se debera? ya investigue pero no lo puedo quitar ;) saludos Título: Re: Ayuda con Consulta. Publicado por: seba123neo en 28 Marzo 2010, 01:43 am creo que la matricula es string no ? tendria que ir entre comillas simples no ?? o ahi ya esta con comillas ?? pregunto porque de MySQL en web no conozco...
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 28 Marzo 2010, 03:20 am excelente amigos ya quedo listo gracias por sus consejos .. peo no me da el resultado esperado puesto a que no me da el listado de materias y no me dice no esta calificado quiza este aplicando mal el codigo php. saludos ;(
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 28 Marzo 2010, 07:46 am gracias a todos por su ayudaya logre mi objetivo..
dios los bendiga a todos Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 24 Abril 2010, 00:33 am hola gente buen dia com estan.
me surgio una gran duda y pido de su asesoria, tengo la siguiente consulta. Código
y esta me da el siguiente resultado. El alumno PEPE TOÑO con Matricula: 91901014431 Tiene las Siguientes Calificaciones Materia Calificacion Fecha Calificacion INGLES I 89 01/01/2010 MATEMATICAS I 78 02/01/2010 TALLER DE REDACCION I NO CALIFICADO METODOLOGIA DE LA LECTURA NO CALIFICADO HISTORIA MODERNA NO CALIFICADO pero si consulto un alumno diferente no me muestra las materias que ya califico el otro a que se debera? El alumno PANCHO PEREZ con Matricula: 91901014429 Tiene las Siguientes Calificaciones Materia Calificacion Fecha Calificacion TALLER DE REDACCION I NO CALIFICADO METODOLOGIA DE LA LECTURA NO CALIFICADO HISTORIA MODERNA NO CALIFICADO ojala puedan darme una idea. muchas gracias el codigo que estoy aplicando es el siguiente. Código
gracias por su ayuda Título: Re: Ayuda con Consulta. Publicado por: Skeletron en 24 Abril 2010, 00:42 am Y estas seguro quue ya calificó?
Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 24 Abril 2010, 02:15 am el primero califico ingles y matematicas y el segundo todavia no. si se las califico aparecen pero si no se las pongo no aparecen y deberia de aparecer como no calificado..
Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 25 Abril 2010, 01:24 am Entonces tu problema literalmente es... que si un alumno tiene materias con calificacion y el otro alumno en esas mismas materias no tiene ninguna calificacion... entonces las del segundo alumno no se muestran en pantalla??? :rolleyes:
Espero no sea mucho pedir pero... podrias colocar aca un ejemplo de los campos de las 2 tablas que estas usando para hacer tus JOINES ;) algo asi tipo: 'Tengo 2 tablas, la primera tiene los siguientes campos : ' tabla1 alumnos, matricula, fecha, materia tabla2 matricula, materia Aunque creo tu problema (si es lo que te pregunte inicialmente) estaria aqui: Citar IFNULL( k.calif1A, 'NO CALIFICADO' ) Porque ahi dices si calificacion tiene un valor NULL retorname 'No calificado' bien perfecto.. ahora que pasa, estas haciendo 1 JOIN de 2 tablas yo no conozco las estructuras de las 2 tablas (Por eso te pido una demostracion) pero, que pasa cuando 2 campos en ambas tablas se comparan y uno tiene valor no nulo sin embargo el otro si tiene un valor nulo??? Tu unica condicion es que cuando calificacion sea NULL retorne 'NO CALIFICADO' pero para que esto se cumpla... ambos campos comparados deben tener valor NULL, lo que si podrias intentar completar el IF con algo tipo: IF(k.calif1A IS NULL, 'NO CALIFICA', k.califi1A) O sea si uno de los valores es Nulo 'no califica' de lo contrario pues tirame el valor que existe. Pero me puedo equivocar, no conozco la estructura de las tablas... solo estoy ofreciendo un estimado acorde a lo que veo. :P Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 25 Abril 2010, 03:29 am HOLA TIFA muchas gracias por tu ayuda, aqui te muestro las estructuras de las tablas.
son, alumnos, kardex y materias. Código
gracias por tu valioso apoyo.. rogelio Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 25 Abril 2010, 20:55 pm Unos puntitos.
Acorde a los datos que estas solicitando, no necesitas usar un JOIN con las 3 tablas.... de hecho con 2 tablas es mas que suficiente (Para este caso). :rolleyes: porque lo digo??? porque tienes el campo materia dentro de la tabla Kardex, que asumo se relaciona en ese mismo campo con la tabla Materias y puesto que la relacion posee el mismo valor... y es el unico campo que referencias de esta tabla en tu consulta SQL... felizmente puedes descartar usar esta tabla en tu consulta SQL, y sencillamente hacer el JOIN con las tablas Kardex y Alumnos, obteniendo el campo materia de la tabla Kardex. Otra cosita, ten muy en claro el tamanio (espacio) que ocupan los tipos de datos, cuidado con esos tipos de datos que leo tipo bigint en un campo de matricula... y cuidado con el almacenamiento de los varchar que veo hasta 255 cuando apenas vas a guardar algo que a lo maximo ocuparia 50 caracteres. Ten en cuenta que tu consulta SQL esta buscando la nota de 1 sola persona a la vez.. o donde su matricula sea nula Te comento que he recreado las tablas que tienes.... con los siguientes datos: Código
Usando como modelo tu consulta SQL, y me aparecen perfectamente los datos solicitados (La unica diferencia es que aca obvio usar la tercera tabla Materias, pero luego es lo mismo): Código
Podrias publicar aca que valores en ambas tablas o en las 3 tablas si todavia quieres continuar usando los JOINS con las 3. Que valores tienen ambos alumnos en las 3 o 2 tablas aca... Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 26 Abril 2010, 01:31 am tifa disculpa lo que tu me pones esta perfecto pero creo que no me di a entender bien.
lo que sucede es que en tabla materias tengo almacenadas 33 materias y son las que quiero imprimir en la consulta de cualquier alumno siempre. en la primer consulta me imprime bien las 33 materias que es lo que quiero. pero si consulto otro alumno como a PANCHO PEREZ no me muestra las 33 solo 31 en esta consulta me muestra las 33 materias de tabla materias con sus respectivas calificadas.. El alumno PEPE TOÑO con Matricula: 91901014431 Tiene las Siguientes Calificaciones Materia Calificacion Fecha Calificacion INGLES I 89 01/01/2010 MATEMATICAS I 78 02/01/2010 TALLER DE REDACCION I NO CALIFICADO METODOLOGIA DE LA LECTURA NO CALIFICADO HISTORIA MODERNA NO CALIFICADO pero en esta segunda consulta no me muestra las 33 materias de la tabla materias porque el alumno anterior ya estan calificadas me muestra lo siguiente.. El alumno PANCHO PEREZ con Matricula: 91901014429 Tiene las Siguientes Calificaciones Materia Calificacion Fecha Calificacion TALLER DE REDACCION I NO CALIFICADO METODOLOGIA DE LA LECTURA NO CALIFICADO HISTORIA MODERNA NO CALIFICADO no se si me explique.. PANCHO PEREZ me muestra 31 materias de la tabla materias y me faltan 2 materias mas que deberia de mostrar de la tabla materias independientemente si fueron calificadas por otro alumno.. gracias. tifa Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 26 Abril 2010, 01:54 am Yo te entendi perfectamente ;) intentas decirme que hay 3 materias que no se presentan en pantalla porque tienen valores NULL pero cuando tienen valor real asignado si se presentan en pantalla... de lo contrario no :P
Te agradeceria si me mostrases entonces, en las 3 tablas en cuestion que valores le corresponden a estos 2 alumnos para yo tener una guia mejor del asunto. Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 26 Abril 2010, 02:08 am en la tabla materias tengo almacenado lo siguiente:
Código
es un listsado de 33 materias. al consultar cada alumno me debe de mostrar las 33 materias de esta tabla. listado como aqui. El alumno PEPE TOÑO con Matricula: 91901014431 Tiene las Siguientes Calificaciones Materia Calificacion Fecha Calificacion INGLES I 89 01/01/2010 MATEMATICAS I 78 02/01/2010 TALLER DE REDACCION I NO CALIFICADO METODOLOGIA DE LA LECTURA NO CALIFICADO HISTORIA MODERNA NO CALIFICADO pero si yo quiero consultar un alumno diferente y que no esta calificado como este que tiene 2 me muestra lo siguiente. El alumno PANCHO PEREZ con Matricula: 91901014429 Tiene las Siguientes Calificaciones Materia Calificacion Fecha Calificacion TALLER DE REDACCION I NO CALIFICADO METODOLOGIA DE LA LECTURA NO CALIFICADO HISTORIA MODERNA NO CALIFICADO es decir... el alumno que no ha calificado nada me esta omitiendo las primeras 2 materias que serian ingles y español.. y solo me muestra eso... espeor entenderme un pquito mejor.. ;) Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 26 Abril 2010, 04:04 am Para los que no se enteran (y por si le pasa a alguien vamos :rolleyes:)
Royer me envio la muestra de sus 3 tablas por MP (protegiendo sus datos al acceso publico esta en su derecho ;) ) y bueno, resulta ser que los datos que el quiere sacar existen en la Tabla Alumnos y la tabla Materias pero no tienen ningun registro en Kardex ;) (Solo de los alumnos que el quiere sacar y les pasa esto). Por lo que le respondi: Royer me aclaraste mejor ahora ;-) entonces el alumno que NO tiene ningun registro en la tabla Kardex ... hay es que esta tu problema chico :rolleyes: Mira agregue un usuario extra a la tabla Alumnos: Código
Pero no le agregue absolutamente nada en Kardex a este nuevo usuario (QUe es MARIA LOPEZ): Código
Ahora hago tu magica consult a a MARIA y..... Código
Bingo ;-) Ahora quieres saber porque ocurrio esto??? Pues precisamente chico porque MARIA solo existe en la tabla Alumnos y Materias ;) sin embargo tu haces la comparaciones con Kardex.. pero como esta alumna NO tiene nada en Kardex... como va a retonarte las calificaciones que se reflejan en la tabla Kardex???? Si no existen datos de ningun tipo de ella en Kardex???? Sin embargo si existen datos de ella en la tabla Materia y Alumnos... Recuerdate que el campo calif1A esta en la tabla Kardex y es ese campo o sea mira tu consulta SQL dice: Citar m.codigomateria = k.codigomateria O sea las materias que esten en la tabla Kardex que concuerden con las materias que esten en la tabla Materias... pero si tu no tienes registros de algun alumno en la tabla Kardex... como quieres que te retorne las materias que estan ahi dentro??? O sea ya que solamente tienes datos en la tabla Alumnos y Materias para el caso mostrado tu comparacion de tu consulta dice: Citar eft outer join alumnos a on k.matricula = a.matricula Pero... k.matricula pertenece a la tabla Kardex no??? y si Kardex no tiene registros aca para dicho alumno... que va a retornarte para la calificacion?? Nada (Que es lo que esta pasando). Tendras que agregar 1 campo extra en la tabla Materias para que puedas relacionar las materias con alumnos sin que estas esten obligatoriamente en Kardex... o registrar datos en la tabla Kardex para todos los alumnos aunque el valor sea null. :D Título: Re: Ayuda con Consulta. Publicado por: royerphpmysql en 26 Abril 2010, 04:16 am entonces seria factible agregar a la tabla materias tambien el numero de matricula ? se resuelve la bronca ?
Título: Re: Ayuda con Consulta. Publicado por: ^Tifa^ en 26 Abril 2010, 04:27 am Sip asi se resuelve royer pero tendrias que hacerle un ligero cambio a tu consulta SQL para que funcione si haces eso ;)
O tambien puedes tambien hacer esto: Código
Sustituyendo la matricula al final (la que apunta a alumnos) por el numero de Matricula del alumno que NO tiene registros en la tabla Kardex. |