Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/01/2010, 06:41
Aragorn_miki
 
Fecha de Ingreso: enero-2010
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Consultas con Zend_Db

Muchas gracias. La verdad que era bastante obvio la solucion jejeje. Poner una variable en lugar de un nombre de tabla, pero no sabia como se debia de poner.

Tengo otra duda a ver si me podeis ayudar:

Quiero hacer una query a diferentes bases de datos (cada query la guardo en un array con sus resultados), quiero guardar el resultado de cada una de las consultas en un array para asi poder crear una grafica de todas las consultas.

Lo detallo: Yo hago una consulta a una base de datos 1 que me retorna un array de dos posicions (la hora) y (los datos de esa hora) y esto quiero guardarlo en un array que tenga 11 campos (uno por cada consulta que quiero hacer de las 11 bases de datos), asi finalmente tener:

ArraySuperior [11] = [arrayConsulta1[hora][datos]],[arrayConsulta2[hora][datos],[arrayConsulta3[hora][datos],...,[arrayConsulta11[hora11][datos11] ]

Luego este ArraySuperiro ya lo tratare para mostrarlo en una grafica y tal de forma que me salga en una misma grafica de lineas (11 lineas) los datos de las 11 bases de datos.

La hora es comun en todas.

Os dejo el codigo que uso para la consulta individual que hago actualmente:

Código:
public function getLastErrorsByHour($date,$date_next,$hour){		
				
		$select = " 
		select EXTRACT(HOUR from temp.fecha) as hora, count(*) as total
		from (
			select *
			from ".$this->name." 
			where fecha between '".$date."' AND '".$date_next."'
		) as temp
		group by hora
		order by 1;";

		$stmt =$this->_db->query($select);
		$result = $stmt->fetchAll();
					
		return $result;
Ya se que es un poco complicado, seguro que hay una forma mejor y mas facil.

La base de datos la escojo en el Bootstrap.php segun la url ingresada y alli le defino el nombre de la base de datos (referenciadolo al Application.ini) y el nombre de la tabla (que es diferente en cada una de la bade de datos)

Código:
protected function _initDatabaseRegistry()
{        	
//Obtenemos el nombre de la url 
$direc = $_SERVER['SERVER_NAME'];
		
//definimos el nombre de la bd y la tabla
if ($direc == "www.pag.com"){$table_name = 'em_t1';	$db_selection = 'db_es';}
elseif ($direc == "ar.pag.com"){$table_name = 'em_t2'; $db_selection = db_ar';}
elseif ($direc == 'cl.pag.com'){$table_name = 'em_t3'; $db_selection = 'db_cl';}
elseif ($direc == 'co.pag.com'){$table_name = 'em_t4';	$db_selection = 'db_co';}
elseif ($direc == 'mx.pag.com'){$table_name = 'em_t5_mx';	$db_selection = 'db_mx';}
elseif ($direc == 'it.pag.com'){$table_name = 'em_t6_it'; $db_selection = 'db_it';}
elseif ($direc == 'fr.pag.com'){$table_name = 'em_t7_fr'; $db_selection = 'db_fr';}
	elseif ($direc == 'uk.pag.com'){$table_name = 'em_t8_uk'; $db_selection = 'db_uk';}
	elseif ($direc == 'de.pag.com'){$table_name = 'em_t8_de'; $db_selection = 'db_de';}
	elseif ($direc == 'us.pag.com'){$table_name = 'em_t9_us'; $db_selection = 'db_us';}
	elseif ($direc == 'in.pag.com'){$table_name = 'em_t10_in'; $db_selection = 'db_in';}
	elseif ($direc == 'ij.pag.com'){$table_name = 'em_t11';	$db_selection = 'db_ij';}
		
// carga de configuracion
$dbconf = $this->getOption($db_selection);
//definimos la tabla de la base de datos
define($table_name, $dbconf->db->table->prefix);
// cargar conexion
$db = new Zend_Db_Adapter_Pdo_Mysql ($dbconf);
// guardar en registro
Zend_Registry::set ( "database", $db );
		
return $db;
}
Con esto consigo que segun la url que ingrese pueda acceder a una base de datos y su tabla correspondiente.

$db_selection = 'db_es' hacen referencia a las definiciones del application.ini de las bbdd.

$table_name = 'em_t1' lo uso en el modulo unico que tengo para hacer las consultas y que las consultas que uiero hacer son las mismas para todas las bbdd y las estructuras de las tablas son iguales.



Gracias.

Última edición por Aragorn_miki; 29/01/2010 a las 06:55 Razón: Ampliación