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

problema con una consulta para expert@s

Estas en el tema de problema con una consulta para expert@s en el foro de Mysql en Foros del Web. Buenas noches a to@s. Llevo unos días dándole vueltas a una consulta sql que me trae por el camino de la amargura. Pero antes de ...
  #1 (permalink)  
Antiguo 10/03/2011, 16:51
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
problema con una consulta para expert@s

Buenas noches a to@s.
Llevo unos días dándole vueltas a una consulta sql que me trae por el camino de la amargura. Pero antes de seguir complicándome y perder más tiempo quería preguntaros si realmente puedo hacerlo con una sola consulta. Estoy bastante oxidada en sql...

Vereis, hay 3 tablas, trabajadores, centros y centros regionales.
Los centros regionales son los que coordinan a los centros. Así que un centro regional también es un centro, pues tiene trabajadores, que a su vez coordina a otros centros que no son regionales, estando la tabla centros vinculada a la tabla centros regionales(los centros regionales se repiten en las 2)
Los trabajadores son de 2 tipos (nivel 1 y nivel 2) y pueden trabajar tanto en un centro regional como en un centro, aunque sólo están vinculados con la tabla centros.
Os lo explico quizás mejor así:
Tabla centros Regionales: id_cr | nombre_cr
Tabla centros: id_cr | id_c | nombre_c
Tabla trabajadores: id_trabajador | id_nivel | id_centro

Ahora supongamos que soy un trabajador de nivel 2(peón) y quiero saber qué peones trabajan en mi mismo centro y qué trabajadores de nivel 1(coordinadores) gestionan todos los centros a los que pertenece su centro regional

Con datos:

tabla centros regionales
--------------------------------
id_cr | nombre_cr
----------------------------------
1 | cr1
-----------------------------------
2 | cr2
-----------------------------------
3 | cr3

tabla centros
------------------------------------
id_cr | id_centro | nombre centro
-----------------------------------------------
1 | 1 | cr1
-----------------------------------------------
2 | 2 | cr2
-----------------------------------------------
2 | 3 | cr3
-----------------------------------------------
1 | 4 | c4
-----------------------------------------------
2 | 5 | c5
-----------------------------------------------
1 | 6 | c6

tabla trabajadores
-----------------------------------------------
id_trabajador | id_nivel | id_centro
------------------------------------------------
1 | 1 | 4
------------------------------------------------
2 | 1 | 1
------------------------------------------------
3 | 2 | 1
------------------------------------------------
4 | 2 | 1
------------------------------------------------
5 | 2 | 3
------------------------------------------------
6 | 1 | 3


Suponiendo ahora que soy el trabajador 3. En la consulta que os propongo debería obtener como resultados los trabajadores 4(de mi mismo nivel y mismo centro) y los coordinadores 1 y 2 que, aunque trabajen en centros distintos, los centros pertenecen al mismo centro regional y son de nivel 1.

Me he explicado bien?? Gracias por la ayudita
  #2 (permalink)  
Antiguo 11/03/2011, 02:52
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: problema con una consulta para expert@s

Ya sé que no me he esperado a que me respondais, pero soy una mente inquieta y después de darle más vueltas pensé que no tiene que ser tan difícil. Con peores consultas me enfrenté en el pasado asi que podré con esta.
Y así ha sido, os la remito para que me deis la aprobación por si podría ser más simple(aunque funcionar funciona)

Código MySQL:
Ver original
  1. SELECT username, nombre, id_centro, id_nivel from trabajadores
  2. where username != '$usuario'
  3. (id_nivel = 3 and id_centro = (select id_centro from trabajadores where username = '$usuario' ))
  4. (id_nivel = 2 and id_centro in (select id_centro from centros where id_centro_regional = (select id_centro_regional from centros c, trabajadores t where c.id_centro = t.id_centro and username = '$usuario')))

Ahí estaba la clave, en ese or que yo ponía como and.

Espero que os sirva de ayuda para vuestras consultas y muchas gracias por todo.

Que tengais buen día!!

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 05:24.