Comunidad de diseño web y desarrollo en internet online

Dificultades con un Select

Citar            
MensajeEscrito el 15 Oct 2009 10:25 am
Buenas a todos,

tengo una consulta que me esta complicando bastante la existencia :P os comento:

Tengo tres tablas:

PRESENTACIONES
- id
- nombre
- areas_ids

AREAS
- id
- nombre

TRABAJOS
- id
- nombre
- area_id

Bien imaginemos que tenemos los siguientes datos en las tablas

PRESENTACIONES
[1] [Presentacion Prueba] [1,2]

AREAS
[1] [AREA UNO]
[2] [AREA DOS]
[3] [AREA TRES]

TRABAJOS
[1] [TRABAJO UNO] [1]
[2] [TRABAJO DOS] [2]
[3] [TRABAJO TRES] [3]

Bien pues quiero hacer un select de los trabajos que esten asociados a las areas asociadas a la presentacion de prueba, es decir todos los trabajos asociados a las areas 1 y 2 en este caso.

la consulta que actualmente tengo es:
Código:

Código MySQL :

SELECT id, nombre FROM trabajos WHERE area_id IN (SELECT areas_ids FROM presentaciones WHERE id = 1);


Y esta consulta solo me devuelve:
[1] [TRABAJO UNO]

en vez de devolverme:
[1] [TRABAJO UNO]
[2] [TRABAJO DOS]

Pero sin embargo si hago la consulta directamente sin el segundo select:

Código MySQL :

SELECT id, nombre FROM trabajos WHERE area_id IN (1,2);


si que me devuelve
[1] [TRABAJO UNO]
[2] [TRABAJO DOS]

Supongo que sera por que el valor que devuelve el segundo select lo toma como un solo valor y no como una de valores separados por comas. Se que podria hacerlo en dos consultas desde el codigo y estaria solucionado, pero el problema es que lo necesito hacer todo en una sola consulta.

Podeis ayudarme u orientarme en como resolverlo?

Por Trodi

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Oct 2009 12:51 pm
PRESENTACIONES
[1] [Presentacion Prueba] [1,2]


Si 1,2 pretende que sean dos id's, no sirve y te aseguro que si intentas evaluar eso en un select te fallara. El problema está en la estructura de la tabla. MySQL no es php, existen tipo de datos... Además esto es más desconocimiento de base de datos que otra cosa.


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 15 Oct 2009 02:46 pm
No desconocimiento de base de datos mas bien error de planteamiento de la estructura de la misma, he llegado a la conclusion de replantearla ya que la relación entre PRESENTACIONES y AREAS és muchos a muchos, n a n, cada presentación se puede presentar n areas y cada area puede recibir n presentaciones... luego la estructura es nueva es la siguiente:

PRESENTACIONES
- id
- nombre

SESIONES
- presentacion_id
- area_id
- fecha

AREAS
- id
- nombre

TRABAJOS
- id
- nombre
- area_id

La nueva tabla SESIONES recoge el id de la presentación y el id de area de manera que puedes representar la relación n a n. He puesto un campo Fecha puesto que creo que podria ser relvante y para demostrar que crear la nueva tabla además nos permite guardar una información que antes no podiamos guardar....

Con esta estructura la consulta se resuelve facil....

Código MySQL :

SELECT tr.id, tr.nombre FROM trabajos tr LEFT JOIN sesiones ses ON tr.area_id=ses.area_id WHERE ses.presentacion_id=1


De todas formas gracias por tu respuesta ;)

Por Trodi

3 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.