Ayuda con Consulta.

Iniciado por royerphpmysql, 19 Marzo 2010, 22:16 PM

0 Miembros y 3 Visitantes están viendo este tema.

royerphpmysql

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

Skeletron

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

royerphpmysql

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.

Skeletron

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

royerphpmysql

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.

^Tifa^

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...


Skeletron

Podria solucionarce con un RIGHT JOIN...

royerphpmysql

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 ;)

^Tifa^

CitarPodria 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...

royerphpmysql

otravez muchas gracias TIFA me tendre que ir al foro de PHP jajaja sludos