Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Que hago mal en este datediff???

Estas en el tema de Que hago mal en este datediff??? en el foro de Mysql en Foros del Web. Me estoy volviendo loco, lo único que pretendo es mostrar el tiempo que lleva desconectado un usuario en una tabla de una base de datos ...
  #1 (permalink)  
Antiguo 13/05/2009, 07:26
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Que hago mal en este datediff???

Me estoy volviendo loco, lo único que pretendo es mostrar el tiempo que lleva desconectado un usuario en una tabla de una base de datos MySQL.

El código que intento utilizar es el siguiente:
Código:
SELECT * FROM users WHERE datediff(last_login, now())>7;
Y me devuelve el siguiente mensaje de error:
#1305 - FUNCTION db224849326.datediff does not exist

Sin embargo, si hago un
Código:
SELECT datediff('2009-05-13 15:24:00', '2009-05-10 15:24:00')
Me muestra correctamente el resultado :S

¿Es por usar campos? ¿Qué hago mal?

Saludos y gracias!
  #2 (permalink)  
Antiguo 13/05/2009, 08:01
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: Que hago mal en este datediff???

primero last login deberia de ser de tipo date, ademas en la funcion datediff primero se pone la fecha mayor y como segundo parametro la fechamenor,y tu tienes primero el last login que me imagino que es menor que now(),
  #3 (permalink)  
Antiguo 13/05/2009, 08:14
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Que hago mal en este datediff???

Pero bueno si se coloca la menor primero no debería mandar ese error, solo enviar los dias negativos, pero deberias revisar que last_login sea de tipo date, como dice nuestro compañero.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #4 (permalink)  
Antiguo 13/05/2009, 08:37
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Mi "last_login" es de tipo datetime, ¿no sirve ese?

Gracias por las respuestas.
  #5 (permalink)  
Antiguo 13/05/2009, 09:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Que hago mal en este datediff???

Tema trasladado desde PHP
  #6 (permalink)  
Antiguo 13/05/2009, 09:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Que hago mal en este datediff???

Todo parece estar bien.
La función recibe campos también sin ningún problema.

Describe bien, los procedimientos que realizas y los campos que tienes en tu tabla

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 13/05/2009, 11:48
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Que hago mal en este datediff???

Coincido con el compañero By_George primero debe ir la fecha mayor que imagino es la actual y despues la fecha menor que imagino es last_login.

intenta esto:

SELECT * FROM users WHERE datediff(now(), last_login) > 7;

Saludos
  #8 (permalink)  
Antiguo 13/05/2009, 12:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Que hago mal en este datediff???

y, por si las moscas, dinos qué versión usas de MySQL, pues DATEDIFF sólo funciona desde MySQL 4.1.1
  #9 (permalink)  
Antiguo 13/05/2009, 18:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Hola a todos, antes que nada me gustaría agradecer vuestras respuestas.

Sigo teniendo el mismo problema, he probado a cambiar el orden, también con esto:
Código:
SELECT * FROM users WHERE datediff(now(), last_login) > 7;
Pero sigue igual...

Cita:
consulta SQL: Documentación

SELECT *
FROM users
WHERE datediff(
now( ) , last_login
) & gt;

7 LIMIT 0 , 30

MySQL ha dicho: Documentación
#1305 - FUNCTION db224849326.datediff does not exist
Creo que la versión es 5.1, pero no estoy seguro, no se cómo mirarlo dado que uso PHPMyAdmin en un servidor web de hosting.

Un saludo y gracias!
  #10 (permalink)  
Antiguo 14/05/2009, 00:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Que hago mal en este datediff???

escribe esto en el PHPMyAdmin de tu servidor.
SELECT VERSION();
pulsa y tendrás la versión del servidor.
  #11 (permalink)  
Antiguo 14/05/2009, 04:22
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Gracias, he mirado y la versión que devuelve la consulta es: 5.0.67-log

Imagino que ahí datediff debe de funcionar, de hecho, funciona cuando meto valores manualmente, pero no cuando intento, en este caso, hacerlo con campos propios de la BD o funciones (now()).

Un saludo!
  #12 (permalink)  
Antiguo 14/05/2009, 04:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Que hago mal en este datediff???

¿Verificaste que en el código no tengas un espacio entre DATEDIF y el paréntesis?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 14/05/2009, 05:00
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Claro, he probado la función desde ayer, y no la he conseguido hacer funcionar aún.

Ya te digo, me ha funcionado con fechas escritas de forma manual, pero nada a la hora de hacerlo con campos de la BD y la función date().
  #14 (permalink)  
Antiguo 14/05/2009, 05:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Que hago mal en este datediff???

Bien, estuve revisando la posibilidad de bugs en el funcionamiento de la sentencia, y el problema (considerando que el post original era del foro PHP) parece ser asunto del parseo de PHP y no del código en si.
Según un caso presentado en el 2005 (Bug #14124 DATEDIFF does not work), el error puede estar produciéndose cuando el PHP genera el string de la sentencia y lo envía. PHPMyAdmin le mete espacios de separación entre el DATEDIFF y el paréntesis.
La solución, según el bug report es ejecutar previamente esta sentencia:
Código sql:
Ver original
  1. SET sql_mode = "IGNORE_SPACE";
Es decir, hay que cambiar el estado de una variable de MySQL, y luego recién ejecutar la sentencia desde PHP.

El detalle de de los valores del servidor lo encontrarás en: 5.3.2. El modo SQL del servidor
Pruebalo y me dices.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 14/05/2009, 05:31
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

He probado y nada, lo mismo.

consulta SQL: Documentación

SELECT *
FROM users
WHERE datediff(
now( ) , last_login
) & gt;

7 LIMIT 0 , 30


Esto me devuelve en el mensaje de error, ningún espacio entre datediff y el paréntesis, y ya te dije antes, he probado con fechas manualmente escritas y si que funciona, por lo que el problema del espacio no creo que tenga que ver.

Gracias por responder.
  #16 (permalink)  
Antiguo 14/05/2009, 06:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Que hago mal en este datediff???

Grothias.... aclaremos paso por paso, por que es bien raro.
last_login es un campo de la tabla users? y es de tipo datetime?

Si esto es así, prueba desde phpmyadmin, no desde php

Código mysql:
Ver original
  1. SELECT *FROM users WHERE datediff(now(),last_login);

Si no funciona, podrías mostrarnos unos 5 registros que tengas en esta tabla
select *from users limit 5;

Y la descripción de la tabla
desc users;

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #17 (permalink)  
Antiguo 14/05/2009, 06:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Que hago mal en este datediff???

Cita:
por lo que el problema del espacio no creo que tenga que ver.
Es la única posibilidad de que de error en la ejecución de esa sentencia.
¿Desde qué lenguaje y qué aplicación estás ejecutando esa consulta?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 14/05/2009, 06:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Aplicación PHPMyAdmin MySQL 5.0.67-log desde Firefox 3.0.10.

He aquí cinco registros de la tabla users (el campo last_login es de tipo datetime:


A mi me resulta también muy extraño, porque como os digo, con fechas manuales funciona, y os copio la muestra.

Código:
SELECT datediff('2009-05-13 10:00:00', '2009-05-10 10:00:00');
datediff('2009-05-13 10:00:00', '2009-05-10 10:00:00')
3


Ahora, el problema de siempre.

consulta SQL: Documentación

SELECT datediff(
now( ) , last_login
)
FROM users
LIMIT 0 , 30

MySQL ha dicho: Documentación
#1305 - FUNCTION db224849326.datediff does not exist


Por cierto, he probado a hacer:
Código:
SELECT datediff('2009-05-13 10:00:00', '2009-05-10 10:00:00') FROM users;
y tambien da el mismo problema.
consulta SQL: Documentación

SELECT datediff(
'2009-05-13 10:00:00', '2009-05-10 10:00:00'
)
FROM users
LIMIT 0 , 30

MySQL ha dicho: Documentación
#1305 - FUNCTION db224849326.datediff does not exist


Que extraño, espero que tenga solución, porque es una función que me hace bastante falta para reducir mucho el código php que quiero utilizar.
  #19 (permalink)  
Antiguo 14/05/2009, 06:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Que hago mal en este datediff???

No nos dices si has tratado de ejecutar primero la sentencia que te indiqué:
Código sql:
Ver original
  1. SET sql_mode = "IGNORE_SPACE";
Antes de enviar la otra consulta (mira los links que te mandé).

Por otro lado, lo que debes mirar son los log de consultas de PhpMyAdmin, para ver qué es lo que realmente PHP está enviando al servidor. ¿Los has buscado?
Procura ver, sino, los log de consultas de MySQL. En ellos está la ejecución real de lo que recibe.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/05/2009 a las 06:57
  #20 (permalink)  
Antiguo 14/05/2009, 07:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Que hago mal en este datediff???

Cita:
SELECT datediff(
'2009-05-13 10:00:00', '2009-05-10 10:00:00'
)
FROM users
LIMIT 0 , 30
Al parecer tampoco te funcionó con valores pero trabajando sobre la tabla users.
haz un ensayo, crea una tabla que se llame diferente, utliza campos diferentes e ingresa unos pocos datos. haz el mismo ensayo sobre dicha tabla. No uses palabras reservadas en los nombres de tus campos.

Cuentanos como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #21 (permalink)  
Antiguo 14/05/2009, 07:33
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No nos dices si has tratado de ejecutar primero la sentencia que te indiqué:
Código sql:
Ver original
  1. SET sql_mode = "IGNORE_SPACE";
Antes de enviar la otra consulta (mira los links que te mandé).

Por otro lado, lo que debes mirar son los log de consultas de PhpMyAdmin, para ver qué es lo que realmente PHP está enviando al servidor. ¿Los has buscado?
Procura ver, sino, los log de consultas de MySQL. En ellos está la ejecución real de lo que recibe.
Gracias gnzsoloyo, pero si que ejecute las sentencias que me respondiste.

En cuanto termine de hacer la comida y almorzar, pruebo con otra nueva tabla para comprobar.

Gracias de nuevo por vuestra ayuda y paciencia.

Un saludo!
  #22 (permalink)  
Antiguo 14/05/2009, 08:15
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

He probado a crear una nueva tabla pruebas, donde hay 2 campos, nombre y fecha.

He añadido a 3 nombres y 3 fechas, la consulta:
Código:
SELECT nombre, datediff(now(), fecha) FROM pruebas;
Error.
consulta SQL: Documentación

SELECT nombre, datediff(
now( ) , fecha
)
FROM pruebas
LIMIT 0 , 30

MySQL ha dicho: Documentación
#1305 - FUNCTION db224849326.datediff does not exist


Amargante, de verdad...

He mandado un mail a los de mi hosting a ver si ellos por otro lado son capaces de decirme si mi base de datos tiene alguna restricción o algo extraño.

Un saludo!
  #23 (permalink)  
Antiguo 14/05/2009, 08:30
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Que hago mal en este datediff???

Hola a todos...

Curioso caso Grothias, pero ese error solo se muestra cuando existe un espacio entre el datediff y los parentesis, ya volvi a probar con una nueva base de datos y me funciona a la perfeccion el datediff como te lo habia puesto anteriormente


Saludos
  #24 (permalink)  
Antiguo 14/05/2009, 08:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Voy a hacer una prueba en un servidor MySQL local, a ver...
  #25 (permalink)  
Antiguo 14/05/2009, 08:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Funciona en la BD local, como sospechaba :S

Lo de los espacios, por mas que pongo la variable en IGNORE_SPACE no tira.
  #26 (permalink)  
Antiguo 14/05/2009, 09:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Que hago mal en este datediff???

¿Y qué dice el log de consultas de MySQL?
¿Qué es lo que realmente PHP le está mandando?

Lo que tienes que tene en cuenta es que entre que generas la sentencia y que MySQL la recibe está pasando algo, porque, insisto, es la única forma en que esa función te de ese error.
Por eso mi insistencia en ver el log de consultas: Allí se graban no solamente las cosas que salen bien, sino cuál es exactamente la sentencia que entra al MySQL. EXACTAMENTE lo que recibe...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/05/2009 a las 09:56
  #27 (permalink)  
Antiguo 14/05/2009, 16:59
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Que hago mal en este datediff???

Hola gnzsoloyo, no he sido capaz de encontrar el log de la base de datos :S.

Siempre me aparece vacío, por mucho que sea la misma sesión.

Pero bueno, el problema está resuelto, dado que en PHP funciona.

Como decían lo del espacio entre el datediff y el paréntesis, pense que en PHP haciendo la consulta a pelo no tendría que pasarse como string en PHP y luego reproducir la sentencia a partir de esa cadena.

Me gustaría dar las gracias a todos aquellos que me han ayudado en este hilo, ya que todas vuestras aportaciones me han sido de gran ayuda y he aprendido bastante.

De nuevo, muchas gracias.

Saludos!
  #28 (permalink)  
Antiguo 14/05/2009, 17:10
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: Que hago mal en este datediff???

que el problema era la forma en como implementabas la consulta??? o sea que no sabias??? por ahi ubieramos empezado,
__________________
La estadística es una ciencia que demuestra que si mi vecino tiene dos coches y yo ninguno, los dos tenemos uno.
  #29 (permalink)  
Antiguo 08/01/2013, 10:33
 
Fecha de Ingreso: enero-2013
Ubicación: uruguay
Mensajes: 1
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Que hago mal en este datediff???

Hola yo la funcion datediff la uso de forma seguida y la sintaxis correcta es la siguiente

////select
fecha1,
fecha2,
datediff(fecha2, fecha1) AS nombrecampoquecontendra el resultado
FROM nombretabla/////

lo mas importante es que el campo resultado sea nombrado como lo pusiste en la tabla,y es asi de facil la funcion ,luego el parentesis,luego los dos campos separados por comas y el cierrre.
posterior a eso el nombre de la tabla .
si haces esto no importa la version de mysql que tengas ni nada mas
Saludos
  #30 (permalink)  
Antiguo 08/01/2013, 10:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Que hago mal en este datediff???

No resucites temas obsoletos.
Este post tiene casi cuatro años.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 06:11.