Ver Mensaje Individual
  #6 (permalink)  
Antiguo 09/03/2011, 05:20
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Ayuda con consulta...

Cita:
Iniciado por tomuer01 Ver Mensaje
si, correcto.
Bueno, el primer problema que tienes en realidad es que has creado lo que parece ser un a relación N:M ente Sucursal y Departamento, creando un campo multivaluado (varios valores del mismo dominio en el mimo campo del mismo registro).
Eso puede parecer una buena idea a los programadores, pero es una violación al modelo relacional y un error enorme y peligroso para una base de datos. Poner un campo multivaluado haría que reprobaras el examen de BBDD en cualquier universidad. Esetipo de campos genera problemas de consulta (como la tuya) y también problemas de consistencia e integridad de datos.

Tiene dos soluciones para tu caso: 1) Poner ese campo como debe ser en una base de datos relacional y 2) Seguir trabajando con él así como está, pudiendo eventualmente tener serios problemas de integridad en la base de datos (no digo que puedes tenerlos, los vas a tener; es cuestión de tiempo).

En el primer caso, la relación N:M entre dos entidades o dos ytablas se expresa siempre con una tabla adicional, donde se ponen como PK las PK correspondientes a cada tabla. En tu caso esa tabla tendría la PK de sucursal y la PK de departamento, apareciendo un registro por cada par combinado de ambos:
Tabla SUCURSAL_DEPARTAMENTO(id_sucursal, id_departamento)
En este caso la consulta debería ser casi igual a como la pusiste:
Código MySQL:
Ver original
  1. SELECT S.*
  2. FROM sucursal S INNER JOIN sucursal_departamento SD ON S.id_sucursal = SD.id_sucursal
  3. WHERE SD.id_departamento  = $restriccion
  4. ORDER BY id_sucursal;

En el segundo caso, hay una función que puede hacer lo que tu quieres:
Código MySQL:
Ver original
  1. FROM sucursal
  2. WHERE FIND_IN_SET($restriccion, id_departamento)>0
  3. ORDER BY id_sucursal;
Esta solución te puede hacer salir del paso, y puede parecer una buena idea, pero te remarco que la tabla, tal y como la tienes, te traerá problemas en el futuro.
Te conviene remodelar la base y respetar el modelo entidad - relación. Por algo se inventó.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 09/03/2011 a las 05:25