[C con Clase] Consulta mysql

Salvador Pozo salvador en conclase.net
Jue Sep 27 11:59:54 CEST 2018


El pasado 2018-09-27 04:53:57, Carlos Chianalino escribió:
 
CC> Hola a todos actualizo como segui con esto, en otro fore alguien me ayudo
CC> tambien con el siguiente codigo que comparto


Hola:

He intentado ejecutar estos ejemplos desde la consola de PHPMyAdmin, y obtengo errores similares a los que obtienes tu. Sin embargo, si los ejecuto desde la consola de MySQL funcionan perfectamente. No sé si ese es tu caso también. 

Por lo que veo, PHPMyAdmin no ejecuta las consultas de forma atómica, de modo que las sentencias "DELIMITER" se pierden después de ejecutarlas.

Si envías la consulta que define cada función desde PHP debería funcionar, lo probaré a ver... :-)

Yo optimizaría algo más los ejemplos que te han dado, ya que usar la función DAYNAME me parece más complicado, y prefiero evitar bucles siempre que es posible:

----8<-----
DELIMITER //
DROP FUNCTION IF EXISTS juevesPasado;
CREATE FUNCTION juevesPasado() RETURNS DATE
BEGIN
 DECLARE fecha DATE DEFAULT CURRENT_DATE();
 SET fecha = DATE_SUB(fecha, INTERVAL DAYOFWEEK(fecha) - 5 DAY);
 RETURN fecha;
END //
DELIMITER ;
----8<-----

DAYOFWEEK devuelve un entero, en el que 0 indica que la fecha corresponde a un domingo, y sucesivamente. Para el jueves corresponde el valor 5.

Para obtener la fecha del jueves pasado basta con restar el valor del día de la semana para la fecha dada menos cinco.

Por ejemplo, como hoy, 27 de septiembre, es jueves, DAYOFWEEK devuelve 5. De modo que la la fecha actual le restaremos 5-5 días, es decir, nada.

De modo análogo:
----8<-----
DELIMITER //
DROP FUNCTION IF EXISTS juevesProximo;
CREATE FUNCTION juevesProximo() RETURNS DATE
BEGIN
 DECLARE fecha DATE DEFAULT CURRENT_DATE();
 SET fecha = DATE_ADD(fecha, INTERVAL 2 + DAYOFWEEK(fecha) DAY);
 RETURN fecha;
END //
DELIMITER ;
----8<-----

Para calcular el próximo jueves le tendremos que sumar 7-5 + DAYOFWEEK.

Al igual que planteas en tu mensaje, si las consultas se van a lanzar desde un programa PHP, yo también optaría por calcular los valores de las fechas usando funciones PHP, de ese modo evitamos que el trabajo lo haga el motor de la base de datos, pero eso son manías mías. ;-)

En este caso también es preferible evitar bucles (aunque como mucho se repitan 6 veces, siempre es preferible hacerlo directamente, si se puede).

Mi opción sería algo como esto:

----8<----- PHP
    $jPasado = new DateTime();
    $jProximo = new DateTime();

    $jPasado->sub(new DateInterval('P'.(date('w')-4).'D'));
    $jProximo->add(new DateInterval('P'.(date('w')+3).'D'));

    $juevesPasado = $jPasado->format('Y-m-d');
    $juevesProximo = $jProximo->format('Y-m-d');
----8<-----

Hasta pronto.


-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net


Más información sobre la lista de distribución Cconclase