Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/09/2014, 07:59
50l3r
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Analisis de modelo de datos

Cita:
Iniciado por quimfv Ver Mensaje
TODOS los datos de este modelo estan relacionados con los usuarios excepto la tabla campos que no esta relacionada con nada.

SELECT * FROM usuarios u <opcion> JOIN tablaX tX ON u.campocomun=tX.campocomun
<opcion> JOIN tablaY tY ON u.campocomun=tY.campocomun
....

opcion ---> sintaxis de join

En la clausula ON puedes declarar relaciones entre usuarios y cualquier otra tabla y entre cualquier otra tabla entre si....

Ahora bien es mucho mejor cargar los datos que necesites cada vez y no trabajar con un conjunto de tados exahustivo que no vayas a usar completo.
Gracias por tu respuesta quimfv,

Código SQL:
Ver original
  1. SELECT usuarios.UsuarioId,
  2.        UsuarioNombre,
  3.        UsuarioFechaRegistro,
  4.        UsuarioIp,
  5.        UsuarioCorreo,
  6.        UsuarioEstado,
  7.        UsuarioNotificacion,
  8.        UsuarioCorreo,
  9.        GROUP_CONCAT(CONCAT(usuarios_espacios.EspacioId, ':', usuarios_espacios.GrupoId)) AS UEspacios,
  10.        GROUP_CONCAT(CONCAT(espacios.EspacioId, ':', espacios.OrganizacionId, ':', espacios.EspacioNombre, ':', espacios.EspacioEstado)) AS IEspacios,
  11.        GROUP_CONCAT(CONCAT(organizaciones.OrganizacionId, ':', organizaciones.OrganizacionNombre, ':', organizaciones.OrganizacionDB)) AS IOrganizaciones
  12. FROM (`usuarios`)
  13. LEFT JOIN `usuarios_espacios` ON `usuarios_espacios`.`UsuarioId` = `usuarios`.`UsuarioId`
  14. LEFT JOIN `espacios` ON `espacios`.`EspacioId` = `usuarios_espacios`.`EspacioId`
  15. LEFT JOIN `organizaciones` ON `organizaciones`.`OrganizacionId` = `espacios`.`OrganizacionId`
  16. WHERE `usuarios`.`UsuarioId` = 1
  17. GROUP BY `UsuarioId`

Esta query me saca casi todo y hasta ahora lo necesario:

Código HTML:
array(1) {
  [0]=>
  object(stdClass)#20 (10) {
    ["UsuarioId"]=>
    string(1) "1"
    ["UsuarioNombre"]=>
    string(13) "Nombre de ejemplo"
    ["UsuarioFechaRegistro"]=>
    string(19) "2014-09-04 00:00:00"
    ["UsuarioIp"]=>
    NULL
    ["UsuarioCorreo"]=>
    string(25) "[email protected]"
    ["UsuarioEstado"]=>
    string(1) "0"
    ["UsuarioNotificacion"]=>
    string(1) "0"
    ["UEspacios"]=>
    string(7) "1:1,2:1"
    ["IEspacios"]=>
    string(48) "1:1:Área Comercial:0,2:1:Área de Producción:0"
    ["IOrganizaciones"]=>
    string(55) "1:Ejemplo S.L:839979925874,1:Ejemplo S.L:839979925874"
  }
}
En otros desarrollos ya me ha ocurrido que cuando concatenas valores en una columna y hay muchos resultados a mostrar, ocurre que una columna no puede almacenar tantos datos y pega error.

En el caso de UEspacios, IEspacios e IOrganizaciones esto podria ocurrir. ¿Que otra manera podría haber para que esto no ocurriese? Si una persona se une a muchisimos espacios, o crea multitud de organizaciones habra un momento en el que los datos no quepan en la columna concatenada.

Se que hay un metodo para extender el tamaño de datos que puede almacenar una columna, pero no veo que sea la mejor opción.