PHP - Conexion a varias bases de datos para mostrar datos, como???

   
Vista:

Conexion a varias bases de datos para mostrar datos, como???

Publicado por Cecilia Hrz (10 intervenciones) el 01/09/2014 19:58:27
Hola a todos !!

Estoy pidiendo de su ayuda para hacer lo siguiente.

Hacer un reporte en el que me de las ventas de diferentes tiendas (3 BBDD ) con sus sucursales. Cada tienda es una base de datos :s Y aparte tengo otra BD General en donde tengo mi inventario. Me sale muy bien cuando consulto a dos bases de datos pero si quiero las demás, ahi me atoro.

Por ejemplo, Tengo mi filtro y selecciono la empresa (base de datos):
Empresa: Salud
Sucursal:------------
Marca : Shampss
Articulo: --------------

La consulta es algo asi:

SELECT Vta.idArticulo, Inv.nombre, Inv.descripcion, VtaDet.precio, VtaDet.cantidad, Suc.sucursal
FROM $bdatos.Ventas Vta
Left join $bdatos.VentasDet VtaDet ...
Left Join BDGeneral.InventarioArt Inv ....
Left Join BDGeneral.Sucursales Suc
WHERE Suc.sucursal=$sucursal and Inv.marca=marca

Me muestra las ventas de toda la marca Shampss de las 4 sucursales de esa empresa . Eso esta bien.

Pero ahora lo que quiero, es que sin poner la Empresa me muestre todas las sucursales de las 3 empresas (bases) que tengo.
Base de datos/Empresa: 1, 2, 3
Base datos General: En donde tengo una tabla llamada Sucursales, ahi tengo las 12 sucursales guardadas.

No se si tengo que crear mas conexiones. O hacer un select con todas mis sucursales o nose... Tengo esto y no me sale:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
if ( !isset($filtros['nEmpresa'])){
            $nEmpresa=' '; //No selecciono empresa y selecciono algun otro filtro.
 
            $selEmpresas="SELECT Empr.nEmpresa, Empr.cNombre, Empr.cBaseDatos, Scr.nSucursal,
		Scr.cNombre AS cSucursal,
                FROM JRS.SstSucursales Scr
		LEFT JOIN JRS.SstEmpresas Empr ON Empr.nEmpresa=Scr.nEmpresa
		LEFT JOIN JRS.FctParametros Prm ON Prm.nParametro=1
                WHERE  Scr.lBorrado=0 AND Scr.nEmpresa!=1 AND Empr.cBaseDatos!='' ";
 
		while ($regEmpresa = $queryEmp->fetch_object()){
 
		   if (!isset($arrScr[$regEmp->nSucursal]))
        	  {
                	$arrScr[$regEmp->nSucursal] = array('nEmpresa' =>0, 'cBaseDatos'=>0, 'cNombre'=>0 , 'cSucursal'=>0);
			$arrScr[$regEmp->nSucursal]['cBaseDatos']=$regEmp->cBaseDatos;
			$arrScr[$regEmp->nSucursal]['cSucursal']=$regEmp->cSucursal;
		  }
    		}
 
	foreach ($arrScr as $clave=>$valor)
    	{
        	$sucursal=$clave;
       		$baseDatos=$arrScr[$clave]['cBaseDatos'];
 
 
		$selRep = "SELECT bla, bla
					FROM $baseDatos.Venta Vta
					LEFT JOIN $baseDatos.VVentaDet VtaDet  ON VtaDet.nPuntoVenta=Vta.nPuntoVenta
					LEFT JOIN BDGeneral.InvArticulos Art ON ArtPrs.nArticuloPresenta=VtaDet.nArticuloPresenta
					LEFT JOIN BDGeneral.SstSucursales Scr ON Scr.nSucursal=Vta.nSucursal
				         ....
                                        .....
					 WHERE Vta.Sucursal=$filtros //Puede ser la marca, o articulo
                                        GROUP BY Vta.nSucursal,VtaDet.nArticuloPresenta
					 ORDER BY nSucursal, nArticulo,nArticuloPresenta";
 
 
		$_SESSION['debug'][] = "SELECT : " . $selRep;
		$qryOpera=$dbCon->query($selRep);
 
                //empiezo a poner codigo para JSON
		$strReporte = ', "agrupar":1, "campos":      { ... },"valores":[' ;
 
      else{
           //Se lleno el filtro de empresa
	   $nEmpresa=$filtros['nEmpresa'];.




Alguna idea que me puedan dar y lo desarrollo. Solo que no se por donde empezar para cambiarlo a como lo necesito. Muestro mis resultados en una tabla y para eso, uso JSON.

Graciass si lo leen! :) Por favor comentenme si falta algo que no quede claro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Conexion a varias bases de datos para mostrar datos, como???

Publicado por Gonzalo (338 intervenciones) el 02/09/2014 00:31:12
tal vez el resultado queda muy saturado, tal vez un for(i=1;i<=3;i++) y un switch(i) case 1:cambia a empresa1, case 2 cambia a empresa 2; etc, usas el mismo query pero con cada base de datos y sacas la informacion en un solo reporte, es solo una sugerencia. salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Conexion a varias bases de datos para mostrar datos, como???

Publicado por celeste (10 intervenciones) el 02/09/2014 01:28:50
Gracias Roberto. Lo intente con esto y funciono. Encontre el ejemplo en otra pagina:

SELECT t1.producto, SUM(t1.cantidad) Cantidad
FROM ((SELECT base1.productos.producto producto, SUM(base1.productos.cantidad) cantidad FROM base1.productos group by base1.productos.producto)
UNION ALL (SELECT base2.productos.producto, SUM(base2.productos.cantidad) FROM base2.productos group by base2.productos.producto)
UNION ALL (select BASE3.productos.producto, SUM(base3.productos.cantidad) FROM base3.productos GROUP BY base3.productos.producto))t1

Gracias por responder!! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar