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

Inner join o filtro con "OR"

Estas en el tema de Inner join o filtro con "OR" en el foro de Mysql en Foros del Web. Buenas, A ver si me podéis ayudar con esta duda técnica: Tengo varias consultas sobre tablas relacionadas, digamos: Código: tabla1: id_t1 id_t2 nombre tabla2: id_t2 ...
  #1 (permalink)  
Antiguo 11/01/2013, 03:30
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Inner join o filtro con "OR"

Buenas,

A ver si me podéis ayudar con esta duda técnica:

Tengo varias consultas sobre tablas relacionadas, digamos:

Código:
tabla1:

id_t1
id_t2
nombre

tabla2:

id_t2 (este campo es PK en tabla1)
codigo
y yo tengo esta query:

Código MySQL:
Ver original
  1. select id_t1, id_t2, nombre from tabla1 where id_t1 = X

Y luego, tendría que recoger datos de tabla2 en base a los resultados de la consulta anterior (se que podría hacerlo todo en un inner join...) entonces, mi pregunta es:

Que sería más óptimo (sabiendo que lo haga como lo haga, en el primer paso siempre quedarán los id_t1 e id_t2 guardados con PHP)

- Elaborar la segunda consulta con un inner join

Código MySQL:
Ver original
  1. select * from tabla2 inner join tabla1 on...

- Elaborar una lista y ejecutar un select tal que:

Código MySQL:
Ver original
  1. select * from tabla2 where id_t2 = x1 or id_t2 = x2...

Gracias!
  #2 (permalink)  
Antiguo 11/01/2013, 07:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Inner join o filtro con "OR"

No se si te acabo de entender ni si el diseño de tablas que muestras es correcto... pero


Código MySQL:
Ver original
  1. SELECT t1.id_t1, t1.id_t2, t1.nombre, t2.codigo
  2. FROM tabla1 t1 INNER JOIN tabla2 t2
  3. ON t1.id_t2=t2.id_t2
  4. WHERE t1.id_t1 = X

te lo da todo en una sola consulta....

(para tu info es id_t2 IN(x1,x2,....) es mejor que id_t2 = x1 OR id_t2 = x2...)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 11/01/2013, 11:15
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Inner join o filtro con "OR"

Buenas,

Ya se que puedo usar el join para hacerlo todo en una sola consulta (lo puse en el primer post )

La cosa es que por temas con PHP me es más cómodo hacerlo en varios select, aunque no sea tan eficiente que al hacerlo de un solo select (en este caso tendría que iterar el select con join para separar campos en agrupaciones, y luego volver a iterar por las agrupaciones y volver...)

Lo que quiero saber es si teniendo la lista de los campos me saldría más óptimo elaborar una consulta con esos datos o hacerla de nuevo con un join.

Digamos

Código MySQL:
Ver original
  1. -- select1:
  2. select t1.campo1, t2.campo1, t2.campo2
  3. from tabla1 t1
  4. inner join tabla2 t2 on  t1.campo1 = t2.campo3
  5. inner join tabla3 t3 on t3.campo1 = t1.campo1 and t3.campo2 = $var
  6.  
  7. -- rutinas PHP en las que quedarán almacenados todos los datos
  8.  
  9. -- select2:
  10. select t1.campo1, t4.campo1, t4.campo2
  11. from tabla1 t1
  12. inner join tabla4 t4 on  t1.campo1 = t4.campo3
  13. inner join tabla3 t3 on t3.campo1 = t1.campo1 and t3.campo2 = $var

vs

Código MySQL:
Ver original
  1. -- select1
  2. -- rutinas PHP en las que quedarán almacenados todos los datos
  3. -- (nueva) rutina PHP en la que obtengo la lista $lista, que sería, por ejemplo:
  4.  
  5. -- $lista = "1 or t4.campo3 = 2 or t4 = 3"
  6.  
  7. select t4.campo1, t4.campo2
  8. from tabla4 where t4.campo3 = $lista

Espero haber sido más claro ahora

Saludos!

Etiquetas: join, php, resultados, select, tabla, filtros, campos
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:08.