Unir 2 query results y mantener la paginacion

297 views
Skip to first unread message

Mario De León

unread,
May 29, 2013, 2:40:59 PM5/29/13
to ph...@googlegroups.com
Jovenes, aqui voy de nuevo pidiendo su consejo.

Tengo 2 tablas identicas, la primera tiene los registros de hoy, y la segunda lo que va del mes (de ayer para el 1o del mes)

Tengo una pagina de consulta por rango de fechas/hora, si la consulta es de hoy, voy a buscar a la primer tabla, si la consulta es < hoy, voy a la 2da.

El tema es cuando me piden un rango de fechas con mas de 1 dia, por ejemplo, todo lo de ayer y todo lo de hoy.

He pensado hacer 2 querys y luego con array_merge juntar los resultados, pero no tengo idea como manejar la paginacion.

La consulta de un dia me puede generar hasta 30,000 paginas, pero eso no ha sido problema.

Estoy usando las bondades de Laravel / Eloquent para traer los datos y manejar la paginacion :)

Codigo en el controller:
$view = View::make('results')->with('results', Model::search($criteria));
return $view;

Codigo en el model (Model class)
public static function search($data) {
$cdrs = static::select( '*);
$cdrs->where('call_date_time', '>=', $data['fromDate']);}

return $cdrs->paginate(20); // paginacion
}

No es una consulta sobre el framework, sino mas bien en la idea de como manejar este escenario,

Cualquier tip, realmente voy a estar muy agradecido.

Saludos!
--
Mario De León.

Stuardo -StR- Rodríguez

unread,
May 29, 2013, 2:47:55 PM5/29/13
to ph...@googlegroups.com
SELECT * FROM
    (SELECT * FROM tabla_hoy UNION SELECT * FROM tabla_pasado) as todas
WHERE
            todas.call_date_time >=$from
    AND todas.call_date_time <= $to;

--

Stuardo -StR- Rodríguez | Mercenary Web Developer | http://maphpia.com
email: s...@maphpia.com | msn: s...@maphpia.com | gtalk: s...@maphpia.com
office: +502 6646-8047 | mobil: +502 4210-8819 | skype: stuardo_str



2013/5/29 Mario De León <mario...@gmail.com>

--
--
PHPGT :: Grupo de PHPeros de Guatemala
email: ph...@googlegroups.com
reglas de uso: https://sites.google.com/site/grupophpgt
 
---
Has recibido este mensaje porque estás suscrito al grupo "PHPGT Grupo de PHPeros de Guatemala" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a phpgt+un...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Douglas

unread,
May 29, 2013, 2:52:33 PM5/29/13
to ph...@googlegroups.com
Bajo este ejemplo, lo correcto seria

SELECT * FROM tabla_hoy 
WHERE 
            call_date_time >=$from 
    AND call_date_time <= $to;
UNION 
SELECT * FROM tabla_pasado
WHERE 
            call_date_time >=$from 
    AND call_date_time <= $to;

Esto para evitar un union de x tuplas y luego descartar, eso no tiene sentido, mejor filtrar primero y luego hacer union.



--
Enviado desde mi Gmail

Mario De León

unread,
May 29, 2013, 2:52:56 PM5/29/13
to ph...@googlegroups.com
Puff, nuevamente me encuentro intentando inventar el agua azucarada. Gracias!

Crees que tengo que considerar el rendimiento si una de las tablas (los registros del mes) tiene alrededor de 9 millones de registros?
Es decir, el union se ejecuta primero y hasta que obtiene todo el set de datos (9 millones del mes + lo de hoy) ejecuta el select externo? nunca lo he usado.

Gracias de nuevo!




2013/5/29 Stuardo -StR- Rodríguez <s...@maphpia.com>



--
Mario De León.

Mario De León

unread,
May 29, 2013, 2:53:46 PM5/29/13
to ph...@googlegroups.com
Excelente, eso responde la pregunta que justamente acabo de hacer.

Buena onda muchachos, se les agradece bastante!


2013/5/29 Douglas <dougy...@gmail.com>



--
Mario De León.
Reply all
Reply to author
Forward
0 new messages