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

Como buscar usuario en varias tablas

Estas en el tema de Como buscar usuario en varias tablas en el foro de Mysql en Foros del Web. Tengo las tablas de un sistema para colegio. Con una consulta debo buscar dentro de 3 tablas que corresponden a los profesores, apoderados y alumnos, ...
  #1 (permalink)  
Antiguo 22/12/2009, 18:07
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 17 años, 6 meses
Puntos: 5
Como buscar usuario en varias tablas

Tengo las tablas de un sistema para colegio. Con una consulta debo buscar dentro de 3 tablas que corresponden a los profesores, apoderados y alumnos, luego identificar que los datos correspondan a un profesor, apoderado o alumno.

La consulta que tengo es

Código MySQL:
Ver original
  1. FROM sys_employee, sys_students, sys_tutors
  2. sys_employee.run='10000000' and
  3. sys_employee.password=md5('1')
  4. )
  5. or (
  6. sys_students.run='10000000' and
  7. sys_students.password=md5('1')
  8. )
  9. or (
  10. sys_tutors.run='10000000' and
  11. sys_tutors.password=md5('1')
  12. )

La consulta me encuentra el resultado, pero también me devuelve los resultados "paralelos" de las otras tablas, por lo que no me sirve de nada así. La idea es que devuelva los campos de la terminada tabla, y solamente me muestre los datos de la tabla en la que encontró la información.

Adiós.

Última edición por KekoGrama; 22/12/2009 a las 18:13
  #2 (permalink)  
Antiguo 22/12/2009, 21:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Como buscar usuario en varias tablas

Debes usar sentencias join para unir las tablas y no mostrar la información indiscriminadamente como lo estas haciendo.

revisa un poco el tema y vuelve con una nueva consulta

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 22/12/2009, 23:11
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 17 años, 6 meses
Puntos: 5
Respuesta: Como buscar usuario en varias tablas

Es que realmente no se donde buscar e investigar acerca de lo que necesito.
He buscado en Google, pero no encuentro esto exactamente...

¿Me podrías guiar con una consulta de ejemplo?

Adiós.

- EDITO -
Lo que hice fue crear una tabla donde almacenar todos los usuarios, y dependiendo de cierto dato, es porque sus datos se guardaran en determinada tabla.

Pero bueno, como cambie la estructura, ahora tengo un problema a la hora de obtener los datos de X usuario.

Código MySQL:
Ver original
  1. SELECT sys_tutors . * , sys_students . * , sys_employee . * , sys_users.rank, sys_users.run
  2. FROM sys_students JOIN sys_employee JOIN sys_tutors, sys_users INNER JOIN sys_sessions ON sys_users.idUser = sys_sessions.user_id
  3. WHERE sys_sessions.session_id = '35e1b8e0334d85ddc84bfae56c940fb8'
  4. AND (
  5. sys_students.run = sys_users.run
  6. OR sys_tutors.run = sys_users.run
  7. OR sys_employee.run = sys_users.run
  8. )

Lo que hace es devolver todas las columnas de sys_tutors, sys_students y sys_employee. Y solamente necesito que devuelva la columna de donde encontró los datos, osea, el mismo problema inicial.

Última edición por KekoGrama; 22/12/2009 a las 23:25
  #4 (permalink)  
Antiguo 23/12/2009, 03:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como buscar usuario en varias tablas

Tienes que usar UNION ALL
(SELECT 'empleado' sistema, * FROM sys_employee WHERE (sys_employee.run='10000000' AND sys_employee.password=MD5('1')))
UNION ALL
(SELECT 'estudiante', * FROM sys_students WHERE (sys_students.run='10000000' AND sys_students.password=MD5('1')))
UNION ALL
(SELECT 'tutor', * FROM sys_tutors WHERE (sys_tutors.run='10000000' AND sys_tutors.password=MD5('1')))

Te diré que no me gusta la estructura y que deberías haber tenido una sola tabla con los nombres y otra con los sistemas: empleado, alumno, tutor, etc., y en caso de que alguien pueda pertenecer a más de una de esas posibilidades una tercera tabla personasistema. Si no fuera así, un campo en la tabla persona para guardar el foreign key numérico correspondiente al sistema, sería suficiente. Creo que eso sería mejor. Pero para lo que tienes podría servirte lo que te propongo.
Ah, he puesto asterisco porque entiendo que los campos son los mismos y de la misma naturaleza en las tres tablas. Si no es así, tendrás que especificar los nombres de los campos, y que sean en el mismo número y del mismo tipo.
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 19:37.