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

consultas en varias bases de datos

Estas en el tema de consultas en varias bases de datos en el foro de Mysql en Foros del Web. hola buen dia, soy novata en mysql y tengo un problema, y agradeceria su ayuda! necesito hacer una cunsulta, pero la informacion la tengo en ...
  #1 (permalink)  
Antiguo 17/01/2012, 22:45
 
Fecha de Ingreso: diciembre-2011
Mensajes: 90
Antigüedad: 12 años, 4 meses
Puntos: 0
consultas en varias bases de datos

hola buen dia, soy novata en mysql y tengo un problema, y agradeceria su ayuda!

necesito hacer una cunsulta, pero la informacion la tengo en 9 tablas diferentess, el problema es que se envian parametros diferentes de todas las tablas, pueden haber parametros de la tabla 1 o de la 5 o solo de la 2 etc...

alguien sabe como pudo hacer estas consultas, para que solo me de los resultados que concuerden con los parametros enviados, me dijeron que lo intentara con SELECT añadidos pero no se que tan bueno sea eso, gracias por la orientacion y ayuda!
  #2 (permalink)  
Antiguo 18/01/2012, 02:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consultas en varias bases de datos

Se puede ver el problema pero das pocos datos para solucionarlo....

Con lo que dices yo construiria la query dinamicamente con programacion externa con UNION de los SELECT que necesites en cada caso....

Que una consulta tenga que ir a 9 tablas hace pensar en la necisidad de revisar el diseño de la base de datos... pero bueno decir esto es algo arriesgado por mi parte con la información que nos has dado.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 18/01/2012, 09:28
 
Fecha de Ingreso: diciembre-2011
Mensajes: 90
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: consultas en varias bases de datos

gracias, te comento.

en un formulario de cunsulta tengo 20 parametros para la busqueda de empresas(estoy a funciona perfecto) se puede buscar por nombre, rfc, año de constitucion etc, y tiene una lista de chekbox los cuales indican que informacion se mostrara en pantalla.

el problema esque tambien tengo que buscar Productos en español, productos en ingles y procesos y estos datos se encuentran en 9 tablas correspondientes a un sector diferente (productos en español del sector metalico, productos en español del sector automotriz, etc). como le puedo hacer para buscar las empresas que tengan ya sea productos en español, productos en ingles y procesos en los sectores (las 9 tablas), estos parametros son enviados por en texto entonces debo buscar en todos los "productos" con un LIKE , pero tambien manteniendo los parametros que ya se enviarion en el formulario, si me explico un poco mas?

espero puedas ayudarme te lo gradeceria mucho!
  #4 (permalink)  
Antiguo 19/01/2012, 03:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consultas en varias bases de datos

Me reafirmo en el tema del diseño, perece que tienes los productos en tablas distintas en funcion del sector o del idioma....!!??

Una tabla de relacion entre productos y empresas quizas te facilitaria la seleccion de los productos relacionados con las empresas previamente seleccionadas....

Los productos pueden ser muy distintos entre si pero como minimo tendran un campo comun el nombre y otro que seguro que tienen en comun es el sector al que pertenecen... si guardas esos datos comunes a todos en la misma tabla te sera facil recuperarlos y con esos datos nombre y sector cuando se tenga mostrar las caracteristicas de un producto concreto solo tienes que ir a la tabla de ese tipo de productos...(con el idioma lo mismo). Los procesos no son mas que productos o servicios por lo que se deben tratar igual... Todo esto sino hay manera de diseñar una sola tabla para todos los productos claro...

Parece que lo de las empresas si lo tienes bien enfocado una tabla para las empresas, sean del sector que sean...

Haz lo mismo con los productos y procesos

Productos
idProducto
nombre
tipo
sector
idioma

con estos campos puedes tener todos los productos y procesos en una sola tabla... como tendran caracteristicas muy distintas puedes necesitar tablas distintas por sectores para guardar las caracteristicas de los productos.... ademas te aseguras de tener un identificador unico para cada producto....

SectorX
idSectorX
idProducto
...caracteristicas... tantos campos como quieras

De la primera tabla obtienes el listado de productos y cuando se consulte uno concreto en funcion de su sector consultas la tabla adecuada usando el idProducto para localizar las caracteristicas del producto.

La relacion Productos/Empresas la deberias guardar en

RelEmprProd
idRel
idEmpresa
idProducto

asi puedes guardar una relacion n:m es decir cada empresa puede tener de 0 a n productos y cada producto puede estar relacionada con m empresas (de 0 a m empresas).

Si la busqueda se debe hacer por las caracteristicas luego debes forzar primero que se seleccione el sector y hacer el proceso inverso en funcion del idProducto otenido en la tabla de caracteristicas mostrar los productos seleccionados....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 19/01/2012 a las 04:17
  #5 (permalink)  
Antiguo 19/01/2012, 10:22
 
Fecha de Ingreso: diciembre-2011
Mensajes: 90
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: consultas en varias bases de datos

hola muchas gracias por tu explicacion me es muy util, y si tengo una tabla para cada sector mira te muestro esto que hice...
Código PHP:
$selecciona "SELECT Id, Id_empresa, FechaRegistro, HoraRegistro, Empresa, RFC, NombreDirector, Direccion, Estado, Nombre, Apellidos, Cargo, Lada, Tel1, Ext1, Tel2, Ext2, Municipio, CP, Constitucion, Empleados, Web, Bilingue, Diseno, Capacidad, Ventas, Automotriz, MM, Electrico, Electronico, Plasticos, Aeroespacial, TIC, DM, Indirectos, Provintern, ClientesMexico, ClientesExtranjero, SistemaCalidad, ISO9000, ISO20000, ISO14000, OSHA, Informacion' FROM Proveedor_DG WHERE ((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 ((Automotriz LIKE '%$Automotriz%') $tipo (MM LIKE '%$MM%') $tipo (Electrico LIKE '%$Electrico%') $tipo (Electronico LIKE '%$Electronico%') $tipo (Plasticos LIKE '%$Plastico%') $tipo (Aeroespacial LIKE '%$Aeroespacial%') $tipo (TIC LIKE '%$Tic%') $tipo (DM LIKE '%$Dm%') $tipo (Indirectos LIKE '%$Indirectos%')) 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%')) 
UNION
SELECT ProductosEspanol, Id_empresa FROM Metalmecanico WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION 
SELECT ProductosEspanol, Id_empresa FROM Automotriz WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProductosEspanol, Id_empresa FROM Electrico WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProductosEspanol, Id_empresa FROM Electronico WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT DescProdEspanol, Id_empresa FROM Plasticos WHERE ((DescProdEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProdServEsp, Id_empresa FROM Aeroespacial WHERE ((ProdServEsp LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProdEspanol, Id_empresa FROM TICs WHERE ((ProdEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProdEspanol, Id_empresa FROM DispositivosMedicos WHERE ((ProdEspanol  LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProductosEspanol, Id_empresa FROM Indirectos WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
ORDER BY $orden, $orden2 "

de esta forma no funciona, no me sale ningun error, pero tampoco ningun resultado...

lo he probado de esta manera y si me busca los productos de los sectores dependiendo del Id_empresa
Código PHP:
Id_empresa='1081';
$productos mysql_query("
SELECT ProductosEspanol, Id_empresa FROM Metalmecanico WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION 
SELECT ProductosEspanol, Id_empresa FROM Automotriz WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProductosEspanol, Id_empresa FROM Electrico WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProductosEspanol, Id_empresa FROM Electronico WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT DescProdEspanol, Id_empresa FROM Plasticos WHERE ((DescProdEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProdServEsp, Id_empresa FROM Aeroespacial WHERE ((ProdServEsp LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProdEspanol, Id_empresa FROM TICs WHERE ((ProdEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProdEspanol, Id_empresa FROM DispositivosMedicos WHERE ((ProdEspanol  LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
UNION
SELECT ProductosEspanol, Id_empresa FROM Indirectos WHERE ((ProductosEspanol LIKE '%$ProductosEspanol%') AND (Id_empresa = '"
.$Id_empresa."'))
"
); 
mi duda es ¿como lo hago en un solo query, se puede?

gracias eres muy amable!
  #6 (permalink)  
Antiguo 20/01/2012, 02:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consultas en varias bases de datos

Todas las querys que forman parte de un UNION deben tener el mismo numero de campos, no se puede hacer otra cosa....

No tiene ningun sentido intentar hacer lo que intentas...

Primero seleccionas las empresas, creas un array y lo recorres, muestras los datos de la empresa y construyes la query de los productos de la empresa, la ejecutas y los muestras y así para cada empresa obtenida en la primera query....

Si te empeñas en obtenerlo todo en una sola query debes hacer un JOIN entre Proveedor_DG y cada una de las tablas de productos...

SELECT ...lista de campos... FROM Proveedor_DG INNER JOIN Metalmecanico ON Proveedor_DG.Id_empresa=Metalmecanico.Id_empresa
WHERE ...restriciones...
UNION
SELECT ...lista de campos... FROM Proveedor_DG INNER JOIN Metalmecanico ON Proveedor_DG.Id_empresa=Automotriz.Id_empresa
WHERE ...restriciones...
UNION
...

Pero vas a traer una cantidad ingente de datos repetidos....y fuerzas al servidor a construir la relacion 9 veces de forma innecesaria... a demas ORDER BY no se respetará....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 22/01/2012, 23:13
 
Fecha de Ingreso: mayo-2011
Ubicación: sinaloa
Mensajes: 150
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: consultas en varias bases de datos

Sube un diagrama de la BD para poder ver cuales son las tablas que se unen.

Etiquetas: bases, select, sql, tabla
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:45.