Query: creando consultas a la base de datos
Este paquete está compuesto de 3 clases básicas: Query, Select y Condition.
Principales operaciones
Query
- addProjection($alias, $attr)
- Agrega una proyeccion sobre las columnas de las tablas seleccionadas para la respuesta de la consulta.
- addAggregation($aggName, $alias, $attr)
- Agrega una agregación sobre un atributo que aparecerá en el SELECT de la consulta. Los tipos de agregaciones soportados son:
- AGTN_COUNT: cuenta valores de atributos en los registros obtenidos en la consulta
- AGTN_AVG: saca promedio de valores de un determinado atributo obtenidos en la consulta
- AGTN_MAX: calcula el valor máximo de un determinado atributo desde los valores obtenidos en la consulta
- AGTN_MIN: calcula el valor mínimo de un determinado atributo desde los valores obtenidos en la consulta
- AGTN_SUM: calcula la suma de valores de un determinado atributo desde los valores obtenidos en la consulta
- AGTN_DISTINTC: obtiene solo valores distintos de un determinado atributo desde los valores obtenidos en la consulta
- addFrom($tableName, $alias)
- Agrega una tabla fuente de los datos que devuelve la consulta.
- setCondition(Condition $cond)
- Agrega una condicion a la consulta.
- setLimit($max, $offset)
- Agrega un limite de regsitros que devuelve la consulta.
- addOrder($alias, $attr, $dir)
- Agrega ordenamiento por alguna columna de una tabla.
Select
- add( SelectItem $item )
- Agrega un item al select de la consulta.
- getAll()
- Obtiene todos los items del select.
- isEmpty()
- Devuelve true si no tiene items.
Condition
- _AND()
- Genera el AND de 2 o mas condiciones.
- _OR()
- Genera el OR de 2 o mas condiciones.
- _NOT( Condition $condition )
- Genera el NOT de una condicion.
- add( Condition $cond )
- Agrega una subcondicion a una condicion AND u OR.
- EQ( $alias, $attr, $refValue )
- Condicion de igualdad.
- NEQ( $alias, $attr, $refValue )
- Condicion de desigualdad.
- EEQ( $alias, $attr, $refValue )
- Condicion de igualdad exacta.
- ENEQ( $alias, $attr, $refValue )
- Condicion de desigualdad exacta.
- LIKE( $alias, $attr, $refValue )
- Condicion de similitud.
- ILIKE( $alias, $attr, $refValue )
- Condicion de similitud sin considerar mayusculas y minusculas.
- GT( $alias, $attr, $refValue )
- Condicion de mayor que.
- LT( $alias, $attr, $refValue )
- Condicion de menor que.
- GTEQ( $alias, $attr, $refValue )
- Condicion de mayor o igual que.
- LTEQ( $alias, $attr, $refValue )
- Condicion de menor o igual que.
- EQA( $alias, $attr, $refAlias, $refAttr )
- Condicion de igualdad sobre un atributo.
- NEQA( $alias, $attr, $refAlias, $refAttr )
- Condicion de desigualdad sobre un atributo.
- EEQA( $alias, $attr, $refAlias, $refAttr )
- Condicion de igualdad exacta sobre un atributo.
- ENEQA( $alias, $attr, $refAlias, $refAttr )
- Condicion de desigualdad exacta sobre un atributo.
- LIKEA( $alias, $attr, $refAlias, $refAttr )
- Condicion de similitud sobre un atributo.
- ILIKEA( $alias, $attr, $refAlias, $refAttr )
- Condicion de similitud sin considedrar mayusculas y minusculas sobre un atributo.
- GTA( $alias, $attr, $refAlias, $refAttr )
- Condicion de mayor que sobre un atributo.
- LTA( $alias, $attr, $refAlias, $refAttr )
- Condicion de menor que sobre un atributo.
- GTEQA( $alias, $attr, $refAlias, $refAttr )
- Condicion de mayor o igual que sobre un atributo.
- LTEQA( $alias, $attr, $refAlias, $refAttr )
- Condicion de menor o igual que sobre un atributo.
Ejemplo de uso
1 <?php
2
3 $q = new Query();
4 $q->addFrom('Persona', 'p')
5 ->addFrom('Empleado', 'e')
6 ->setCondition(
7 Condition::_AND()
8 ->add( Condition::EQ('p', "nombre", "Carlos") )
9 ->add( Condition::GT('p', "edad", 5) )
10 ->add( Condition::EQA('p', "nombre", 'p', "nombre2") )
11 );
12
13 $db = new DatabaseMySQL();
14 echo $db->evaluateQuery( $q );
15
16 ?>
Resultado: SELECT * FROM Persona p, Empleado e WHERE (p.nombre='Carlos' AND p.edad > 5 AND p.nombre=p.nombre2)
Ejemplo de uso con agregaciones
Con la siguiente tabla:
| nombre | edad | class | deleted | id |
| pablo | 19 | Persona | 0 | 1 |
| pablo | 25 | Persona | 0 | 2 |
| pablo | 30 | Persona | 0 | 3 |
| pablo | 40 | Persona | 0 | 4 |
| miguel | 40 | Persona | 0 | 5 |
| jose | 10 | Persona | 0 | 6 |
Creando la consulta:
1 <?php
2
3 $q = new Query();
4 $q->addAggregation( SelectAggregation::AGTN_DISTINTC, 'p', 'nombre' )
5 ->addFrom('hello_world_persona', 'p')
6 ->setCondition(
7 Condition::GT('p', "edad", 25)
8 );
9
10 $pm = PersistentManager::getInstance();
11 $result = $pm->findByQuery( $q );
12
13 ?>
Resultado obtenido:
Array
(
[0] => Array
(
[nombre] => pablo
)
[1] => Array
(
[nombre] => miguel
)
)