elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 02:07  

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos
| | | |-+  Ayuda con Consulta.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Consulta.  (Leído 6,582 veces)
royerphpmysql

Desconectado Desconectado

Mensajes: 64


que rico tequila.


Ver Perfil
Ayuda con Consulta.
« en: 19 Marzo 2010, 22:16 »

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


En línea
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Ayuda con Consulta.
« Respuesta #1 en: 19 Marzo 2010, 23:16 »

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


En línea

royerphpmysql

Desconectado Desconectado

Mensajes: 64


que rico tequila.


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #2 en: 19 Marzo 2010, 23:46 »

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.
En línea
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Ayuda con Consulta.
« Respuesta #3 en: 20 Marzo 2010, 00:09 »

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
En línea

royerphpmysql

Desconectado Desconectado

Mensajes: 64


que rico tequila.


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #4 en: 20 Marzo 2010, 00:31 »

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.
En línea
^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #5 en: 20 Marzo 2010, 00:42 »

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

En línea
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Ayuda con Consulta.
« Respuesta #6 en: 20 Marzo 2010, 00:45 »

Podria solucionarce con un RIGHT JOIN...
En línea

royerphpmysql

Desconectado Desconectado

Mensajes: 64


que rico tequila.


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #7 en: 20 Marzo 2010, 00:48 »

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 ;)
En línea
^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #8 en: 20 Marzo 2010, 00:49 »

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...
En línea
royerphpmysql

Desconectado Desconectado

Mensajes: 64


que rico tequila.


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #9 en: 20 Marzo 2010, 01:08 »

otravez muchas gracias TIFA me tendre que ir al foro de PHP jajaja sludos
En línea
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Ayuda con Consulta.
« Respuesta #10 en: 20 Marzo 2010, 01:16 »

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;
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Ayuda con Consulta.
« Respuesta #11 en: 20 Marzo 2010, 01:27 »

Código
mysql> SELECT alumnos.nombre, alumnos.apellido, materias.matricula, materias.calificacion FROM alumnos NATURAL RIGHT JOIN materias GROUP BY matricula;
+--------+----------+-----------+--------------+
| nombre | apellido | matricula | calificacion |
+--------+----------+-----------+--------------+
| Noel   | Broda    |         1 |           10 |
| Tiffa  | Perez    |         2 |            9 |
+--------+----------+-----------+--------------+
2 ROWS IN SET (0.02 sec)
 
 
 
mysql> SELECT * FROM materias;
+-----------+--------------+
| matricula | calificacion |
+-----------+--------------+
|         1 |           10 |
|         2 |            9 |
|         2 |            8 |
|         1 |            6 |
+-----------+--------------+
4 ROWS IN SET (0.00 sec)
 
 
 


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?
En línea

royerphpmysql

Desconectado Desconectado

Mensajes: 64


que rico tequila.


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #12 en: 20 Marzo 2010, 01:33 »

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
En línea
seba123neo


Desconectado Desconectado

Mensajes: 3.126



Ver Perfil WWW
Re: Ayuda con Consulta.
« Respuesta #13 en: 20 Marzo 2010, 01:47 »

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.
En línea

Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo.
Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Ayuda con Consulta.
« Respuesta #14 en: 20 Marzo 2010, 01:48 »

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:
En línea
Páginas: [1] 2 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con una consulta compleja
Bases de Datos
luison 0 163 Último mensaje 17 Mayo 2011, 17:29
por luison
ayuda con consulta sql
Bases de Datos
Mr.Blue 4 1,182 Último mensaje 16 Septiembre 2011, 23:23
por fran800m
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines