administrador.modelado.params_sql.group_by_sql.21.4.0 - gamboamartin/administrador GitHub Wiki

group_by_sql

Esta función privada se encarga de generar la cláusula GROUP BY en una consulta SQL, basada en los campos proporcionados.

Signatura

private function group_by_sql(array $group_by): string|array

Parámetros

$group_by (array): Un arreglo que contiene los campos por los cuales agrupar los resultados en la consulta SQL.

Retorna

  • string: La cláusula GROUP BY generada correctamente si los campos son válidos.
  • array: Un arreglo que contiene un mensaje de error en caso de que ocurra algún problema durante la generación de la cláusula GROUP BY. El formato del arreglo es el siguiente:
    • mensaje: El mensaje de error.
    • data: Los datos relevantes asociados al error, como los campos proporcionados.
    • es_final: Indica si el error es final y no se pueden realizar más operaciones.

Ejemplos

// Creación de objeto
$objeto = new params_sql();

// Caso 1: Generar la cláusula GROUP BY correctamente
$group_by_campos = ['campo1', 'campo2', 'campo3'];
$resultado = $objeto->group_by_sql($group_by_campos);
// $resultado contendrá la cláusula GROUP BY generada correctamente

// Caso 2: Campo vacío proporcionado
$group_by_campos_vacio = ['campo1', '', 'campo3'];
$resultado = $objeto->group_by_sql($group_by_campos_vacio);
/*
$resultado contendrá un arreglo con un mensaje de error si se proporciona un campo vacío en $group_by
*/

// Caso 3: Campo numérico proporcionado
$group_by_campos_numericos = ['campo1', 123, 'campo3'];
$resultado = $objeto->group_by_sql($group_by_campos_numericos);
/*
$resultado contendrá un arreglo con un mensaje de error si se proporciona un campo numérico en $group_by
*/

Codigo de la función

private function group_by_sql(array $group_by): string|array
    {
        $group_by_sql = '';
        foreach ($group_by as $campo){
            $campo = trim($campo);
            if($campo === ''){
                return $this->error->error(mensaje: 'Error el campo no puede venir vacio', data: $group_by,
                    es_final: true);
            }
            if(is_numeric($campo)){
                return $this->error->error(mensaje:'Error el campo debe ser un texto', data: $campo, es_final: true);
            }
            if($group_by_sql === ''){
                $group_by_sql.=' GROUP BY '.$campo.' ';
            }
            else {
                $group_by_sql .= ',' . $campo.' ';
            }
        }
        return $group_by_sql;
    }