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

Obteniendo datos de 3 tablas condicionalmente

Estas en el tema de Obteniendo datos de 3 tablas condicionalmente en el foro de Mysql en Foros del Web. Hola tengo 3 tablas en las que tengo datos de unas sucursales, el problema es que necesito hacer un filtro, anexo un diagrama (a ver ...
  #1 (permalink)  
Antiguo 14/08/2018, 12:39
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 3 meses
Puntos: 16
Obteniendo datos de 3 tablas condicionalmente

Hola tengo 3 tablas en las que tengo datos de unas sucursales, el problema es que necesito hacer un filtro, anexo un diagrama (a ver si se entiende) de la estructura de las tablas +-

En un momento dado debo poder realizar un filtro que me muestre solo resultados por ejemplo que se muestren solo las sucursales que trabajan 24hrs, la estructura se parece a esto:

TABLA SUCURSAL
---------------
|id| datos |
---------------
| 1|Sucursal 1|
---------------
| 2|Sucursal 2|
---------------

TABLA EXTRA FIELDS
----------------------
|itemid|fieldid|value|
----------------------
| 1 | 1 |7 a 9|
----------------------
| 2 | 1 |24hrs|
----------------------
| 2 | 4 | true|
----------------------

TABLA EXTRA FIELDS VALUES
--------------------
|parentid| name |
--------------------
| 1 | Horario |
--------------------
| 4 | Premium |
--------------------

Resultado esperado
1 - Sucursal 1, Horario: 7 a 9, Premium NO
2 - Sucursal 2, Horario: 24hrs, Premium SI

No logro hacer un query que haga eso

Ojala me puedan ayudar, de antemano gracias
  #2 (permalink)  
Antiguo 14/08/2018, 12:48
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 3 meses
Puntos: 16
Respuesta: Obteniendo datos de 3 tablas condicionalmente

Olvide decir, dentro de la misma query hago un filtro de sucursales cercanas a una posicion en base al valor de uno de los valores de la segunda tabla, mi query actual es esta:

Código SQL:
Ver original
  1. SELECT c.*,f.VALUE,
  2.     ( 6371 * acos( cos( radians("20.000") ) * cos( radians( SUBSTRING_INDEX(f.VALUE, ',', 1) ) ) * cos( radians( SUBSTRING_INDEX(f.VALUE, ',', -1) ) - radians("-103.000") ) + sin( radians("20.000") ) * sin( radians( SUBSTRING_INDEX(f.VALUE, ',', 1) ) ) ) ) AS distance
  3.     FROM  sucursales AS c
  4.     INNER JOIN fields_values AS f ON c.id = f.item_id
  5.     WHERE f.field_id = 1
  6.     HAVING distance < 20
__________________
CreandoWebs.com
www.creandowebs.com
PLANTILLAS TEMPLATEMONSTER CON 10% DE DESCUENTO
  #3 (permalink)  
Antiguo 14/08/2018, 13:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obteniendo datos de 3 tablas condicionalmente

No entiendo la estructura de tus tablas porque tienes esto:

TABLA EXTRA FIELDS
----------------------
|itemid|fieldid|value|
----------------------
| 1 | 1 |7 a 9|
----------------------
| 2 | 1 |24hrs|
----------------------
| 2 | 4 | true|
----------------------

TABLA EXTRA FIELDS VALUES
--------------------
|parentid| name |
--------------------
| 1 | Horario |
--------------------
| 4 | Premium |
--------------------

Y que relaciona sucursal con las demas tablas?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 15/08/2018, 18:10
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 2 meses
Puntos: 27
Respuesta: Obteniendo datos de 3 tablas condicionalmente

segun se puede apreciar, seria algo como lo siguiente

Código SQL:
Ver original
  1. SELECT c.*,
  2. (CASE WHEN (SELECT COUNT(1) FROM tabla_extra_field e WHERE e.itemid = c.id AND e.fieldid = 1) > 0 THEN  (SELECT e.VALUE FROM tabla_extra_field e WHERE e.itemid = c.id AND e.fieldid = 1) ELSE '' END) horario,
  3. (CASE WHEN (SELECT COUNT(1) FROM tabla_extra_field e WHERE e.itemid = c.id AND e.fieldid = 4) > 0 THEN  'Premium: SI' ELSE 'Premium: NO' END) premium
  4. FROM sucursal c

Quedando asi

__________________
Asunción Paraguay
Licenciado - Desarrollador Web - Lider de Proyecto/Desarrollador Banco Local
Espacio Geek - Comunidad Tecnologica

Última edición por vicram10; 15/08/2018 a las 18:18

Etiquetas: tabla, tablas
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 21:58.