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

Consulta con dos tablas

Estas en el tema de Consulta con dos tablas en el foro de Mysql en Foros del Web. hola buen día tengo una gran duda... ¿como puedo hacer un SELECT * de dos tablas en el mismo Query? lo he intentado de la ...
  #1 (permalink)  
Antiguo 28/12/2011, 13:14
 
Fecha de Ingreso: diciembre-2011
Mensajes: 90
Antigüedad: 12 años, 3 meses
Puntos: 0
Consulta con dos tablas

hola buen día tengo una gran duda... ¿como puedo hacer un SELECT * de dos tablas en el mismo Query? lo he intentado de la siguinete manrea:
Código PHP:
SELECT FROM ProveedorUsuario WHERE (Usuario.Correo LIKE %$correo%) AND ((Nombre LIKE '%$contacto%') AND (Apellidos LIKE '%$a_contacto%') AND (Cargo LIKE '%$cargo%') AND (Lada LIKE '%$lada%') AND ((Tel1 LIKE '%$telefonos%') OR (Tel2 LIKE '%$telefonos%')) AND (Empresa LIKE '%$nombre%') AND (RFC LIKE '%$rfc%') AND (NombreDirector LIKE '%$ceo%') AND ((Direccion LIKE '%$direccion%') OR (Municipio LIKE '%$direccion%')) AND (CP LIKE '%$cp%') AND (Estado LIKE '%$estado%') AND (Constitucion LIKE '%$ano%') AND (Empleados LIKE '%$empleados%') AND (Web LIKE '%$web%') AND (Bilingue LIKE '%$bilingue%') AND (Diseno LIKE '%$diseno%') AND (Capacidad LIKE '%$capacidad%') AND (Ventas LIKE '%$ventas%') AND (Provintern LIKE '%$multi%') AND (ClientesMexico LIKE '%$mexico%') AND (ClientesExtranjero LIKE '%$extranjero%') AND (SistemaCalidad LIKE '%$h_calidad%') AND ((ISO9000 LIKE '%$c_calidad%') OR (ISO20000 LIKE '%$c_calidad%') OR (ISO14000 LIKE '%$c_calidad%') OR (OSHA LIKE '%$c_calidad%')) AND (Informacion LIKE '%$info%')) 
y despues tengo que imprimir todos los datos mediante un
Código PHP:
while($row mysql_fetch_array($consulta)) 
cual es la manera correcta de hacer esto, no me marca error pero no ejecuta la sentencia como quiero
  #2 (permalink)  
Antiguo 28/12/2011, 13:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta con dos tablas

Mira, te voy a pasar en limpio para que consideres algo:
Código MySQL:
Ver original
  1. FROM Proveedor, Usuario
  2.     (Usuario.Correo LIKE %$correo%)
  3.     AND
  4.         ((Nombre LIKE '%$contacto%')
  5.         AND (Apellidos LIKE '%$a_contacto%')
  6.         AND (Cargo LIKE '%$cargo%')
  7.         AND (Lada LIKE '%$lada%')
  8.         AND ((Tel1 LIKE '%$telefonos%')
  9.             OR (Tel2 LIKE '%$telefonos%'))
  10.         AND (Empresa LIKE '%$nombre%')
  11.         AND (RFC LIKE '%$rfc%')
  12.         AND (NombreDirector LIKE '%$ceo%')
  13.         AND ((Direccion LIKE '%$direccion%')
  14.             OR (Municipio LIKE '%$direccion%'))
  15.         AND (CP LIKE '%$cp%')
  16.         AND (Estado LIKE '%$estado%')
  17.         AND (Constitucion LIKE '%$ano%')
  18.         AND (Empleados LIKE '%$empleados%')
  19.         AND (Web LIKE '%$web%')
  20.         AND (Bilingue LIKE '%$bilingue%')
  21.         AND (Diseno LIKE '%$diseno%')
  22.         AND (Capacidad LIKE '%$capacidad%')
  23.         AND (Ventas LIKE '%$ventas%')
  24.         AND (Provintern LIKE '%$multi%')
  25.         AND (ClientesMexico LIKE '%$mexico%')
  26.         AND (ClientesExtranjero LIKE '%$extranjero%')
  27.         AND (SistemaCalidad LIKE '%$h_calidad%')
  28.         AND ((ISO9000 LIKE '%$c_calidad%')
  29.             OR (ISO20000 LIKE '%$c_calidad%')
  30.             OR (ISO14000 LIKE '%$c_calidad%')
  31.             OR (OSHA LIKE '%$c_calidad%'))
  32.         AND (Informacion LIKE '%$info%'))
Si lo meditas, con semejante cantidad de condiciones obligatorias (las opcionales son casi irrelevantes), lo más probable es que tengas problemas para encontrar registros que las cumplan todas, más que problemas con el JOIN.

En cualquier caso, ese tipo de JOIN (la coma) sólo funciona bien si el campo relacional en ambas tablas lleva exactamente le mismo nombre, sin lo cual puede darte un producto cartesiano o nulo.
Yo más pensaría que no tienes registros que cumplan todo eso...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/12/2011, 13:42
 
Fecha de Ingreso: diciembre-2011
Mensajes: 90
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Consulta con dos tablas

si mira tube problemas con esta consulta, ya que tengo todos estos campos en una tabla y necesito hacer la consulta segun los campos que envien de un formulario, los cuales pueden venir vacios por que en ocaciones solo envian una condicion, y sí me resultó, el problema es que tengo otras 2 tablas de las cuales debo obtener mas datos, pero no encuentro como consolidarlas! :/
  #4 (permalink)  
Antiguo 28/12/2011, 13:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta con dos tablas

Tu problema, insisto, no es de consolidación de tablas. Es de lógica del WHERE. SI al menos una de las condiciones viene vacía, y en la tabla no lo está, esa consulta tal como la pones no devolverá ese registro.
¿Eso lo entiendes?
Tu problema se resuelve en dos partes:
1) Si el formulario llega incompleto, la consulta debe ser obligatoriamente contstruida en forma dinámica en tu programa, de modo tal que sólo incluya las condiciones que están llegando y no las que llegan vacías.
Eso siginifica algo tan simple como validar los datos que llegan, y por cada campo que tiene datos encadenar el bloque "AND nombredelcampo LIKE '%$loquesea%'". Si no lo haces así, se producirá el problema ya mencionado.
2) A nivel de SQL, si ambas tablas están efectivametne relacionadas en una relación 1:N, la segunda tabla debe tener laFK de la primera y lo que corresponde es indicarlo con JOIN ... ON ....
Algo así:
Código MySQL:
Ver original
  1. SELECT T1.*, T2.*
  2. FROM tabla1 T1 INNER JOIN tabla2 T2 ON T1.tabla1_ID = T2.tabla1_ID
  3. WHERE ... #acá van las condiciones.

¿Se va entendiendo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/12/2011, 14:10
 
Fecha de Ingreso: diciembre-2011
Mensajes: 90
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Consulta con dos tablas

Si entiendo, mira lo que hago es validar las variables que entran, UNICAMENTE si su valor es diferente de 'vacio' le asigno ese valor a una variable, que son las que entran en el SELECT y en verdad que la cosulta si se ejecuta.
Pero entiendo tu logica y realmente quisiera hacerlo como tu me lo comentas, podrias darme un ejemplo de como seria el codigo si lo hago asi? te lo agradeceria demasiado.
y en cuanto a SQL asi lo intentare.
  #6 (permalink)  
Antiguo 28/12/2011, 20:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta con dos tablas

En el buscador del foro puedes encontrar ejemplos muy buenos de lo que necesitas.
Este es un caso resuelto por Quimfv en abril de este año.
Está bien claramente expuesto: http://www.forosdelweb.com/f86/como-...namica-900069/
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: query, select, sql, 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 06:54.