Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Timestamp En Mysql

Iniciado por AgeR, 17 de Octubre de 2005, 10:37:23 AM

« anterior - próximo »

AgeR

 Sea como sea, me he decantado por los bigints para guardar el timestamp y va de lujo, es facilísimo hallar diferencias sin necesidad de tener que convertir ningún dato. En este caso lo quería para hallar las horas que faltan para finalizar una compo.

Ahora me queda "sólo" por hacer las páginas y funciones para subir los datos y archivos de los juegos, y las páginas para presentar resultados (compos hechas, juegos presentados...).

Lo dicho, esta semana espero tenerlo todo.

Gracias a todos!  ;)  

TheWind

Cita de: "MAMestre"] TheWind
He presupuesto que el codigo que nos ha puesto era para simplificar. Pues Ager no se queja de la introduccion del resto de valores ;). Como bien dices para separar texto literal de las variables se han de poner comillas dobles. Ahora, los campos cadena y fecha en un SGBD deben ser tratados con comilla simples detras y delante. (SQL'92)


"insert into tabla values (" + $entero + ",'" + $cadena + "','" + $fecha + "')"



Usar bigint es como poner en C un break para salir de un bucle... ...efectivo, pero poco elegante ;)

Un saludo
Ma]Mestre: No me referia a la sintaxis de SQL, sino a la de PHP. Pero ahora veo q no lei bien la sentencia y no vi las comillas " al principio y final de cadena.

Sobre que bigint sea o no elegante, es efectivo y eso al final es lo que cuenta -yo uso la propia bbdd para hacer calculos de fechas- pq PHP no es un lenguaje pensado para la elegancia formal, sino para ser practico -y ciertamente ha huido demasiado de la formalizacion, una cosa es acabar siendo un Modula-3 o Eiffel, y otra es tener funciones str_* str* y sin el str ...- no voy a extenderme en una discusion metodologica sobre la elegancia y la claridad formal en el codigo, es algo q debe tenerse en cuenta, pero no a cualquier precio.

Ager: Huye de usar funciones de BBDD directamente en PHP, usa una abstracicon como adodb (adodb.sf.net) PEAR::DB o Metabase ya que de entrada en PHP 5.0.X no cuentas con las funciones mysql_* de entrada (hay que compilar el php para que las soporte, debido a cambios de licencia) es una solucion muy poco elegante.


MA]Mestre

 TheWind
Creo que use el término elegancia con cierta ironia. Que pensariamos de un programador si vemos un código escrito en C donde para salir en un bucle usa un if seguido de un break. ¿ Le contratariamos ? Pues es lo mismo que opinio yo de usar un tipo de dato bigint de 8bytes para guardar una fecha. En un SGBD cuando estamos hablando de cientos de millones de registros, se pasa de hablar de elegancia a error. Para el caso en question, no es relevante.

Por otro lado la distrubución de la lógica de negocio es mas comoda desde la BBDD como bien apuntas, si bien por temas de volumen de trabajo y usuarios muchas veces se ha de distribuir en otros lugares fuera del SGBD. Esto ya puede ser la maquina local o bien un Apache, ISS, DLLs, etc... ( arquitectura de 3 o N niveles ).

zupervaca
Para manipular un gestor de base de datos se usa el lenguaje SQL, más el extendido de cada plataforma. Transact SQL ( MS SQLServer ), PL/SQL ( Oracle ), etc...
Oracle se comunica a través de un proceso ( SQL Listener ) que acepta peticiones de conexión, o sin el, de manera local a través del SQL PLus.
Toda la sentencia ( transaccion ) sql se envia de forma integra al motor de oracle en formato string. Una vez alli, se valida la sintaxis de la sentència y se crea un plan de ejecución para resolver la consulta. Es en ese punto cuando los datos se formatean a su tipo correspondiente para comparaciones. Y sigue...

Creo que esto no se ajusta para nada a la frase de:
"en sql las fechas realmente son strings camuflados"

P.D: Si usasis el ananlizador de consultas en MS SQLServer, se puede ver el plan de ejecución pulsando Ctrl-L en vez de ejecutar la transaccion ( senetencia sql ). En oracle no es tan facil ver...

TheWind

Cita de: "MAMestre"] Creo que use el término elegancia con cierta ironia. Que pensariamos de un programador si vemos un código escrito en C donde para salir en un bucle usa un if seguido de un break. ¿ Le contratariamos ? Pues es lo mismo que opinio yo de usar un tipo de dato bigint de 8bytes para guardar una fecha. En un SGBD cuando estamos hablando de cientos de millones de registros, se pasa de hablar de elegancia a error. Para el caso en question, no es relevante.

Por otro lado la distrubución de la lógica de negocio es mas comoda desde la BBDD como bien apuntas, si bien por temas de volumen de trabajo y usuarios muchas veces se ha de distribuir en otros lugares fuera del SGBD. Esto ya puede ser la maquina local o bien un Apache, ISS, DLLs, etc... ( arquitectura de 3 o N niveles ).
Si ese recurso esta usado de forma puntual y para solucionar algo que de otra forma requeriria un proceso mucho mas largo, claro que si: es importante poder cumplir fechas y entregar cosas que funcionen, ya que con eso ganas el tiempo necesario para analizar en profundidad mejores formas (en funcion de coste/resultados).

Ahora si continuamente es un uso de chapuzas, no.

zupervaca

 
CitarCreo que esto no se ajusta para nada a la frase de:
"en sql las fechas realmente son strings camuflados"
osea que sigues diciendo que en sql las fechas no son strings camuflados?? :P

Citarzupervaca
Para manipular un gestor de base de datos se usa el lenguaje SQL, más el extendido de cada plataforma. Transact SQL ( MS SQLServer ), PL/SQL ( Oracle ), etc...
Oracle se comunica a través de un proceso ( SQL Listener ) que acepta peticiones de conexión, o sin el, de manera local a través del SQL PLus.
Toda la sentencia ( transaccion ) sql se envia de forma integra al motor de oracle en formato string. Una vez alli, se valida la sintaxis de la sentència y se crea un plan de ejecución para resolver la consulta. Es en ese punto cuando los datos se formatean a su tipo correspondiente para comparaciones. Y sigue...
el SQL listener que mencionas en un servidor que traga strings sql, por mucho que adornes tu sabiduria todo esto que dices no niega en absoluto que el sql maneje strings para las fechas

¿por que no pones un consulta a una base de datos que contenga una fecha? a claro si la pones veremos que las fechas son strings, ains que cosas

AgeR

 Voy a entrar yo también en la discursión sobre qué son las fechas.  :P

En SQL hay varios tipos de fecha. Los DateTime creo que sí que son cadenas de carácteres. Los Timestamp son números. Ambos representan una fecha.
De todas formas, tampoco estoy seguro con lo del DateTime.

De hecho, es bastante lógico que usar fechas en formato numérico, como los timestamps, faciltan las comparaciones y operaciones. No sólo las facilitan sino que es mucho más rápido que andar convirtiendo cadenas, operar y volver a reconvertir.


Bueno, sobre la solución que he elegido del bigint, pues la verdad, podía haber elegido guardar la fecha en un DateTime. Lo malo es que para calcular por ejemplo el tiempo que falta para que acabe una compo, tenía que andar convirtiendo cadenas para comprobarlo, cosa que de este modo me ahorro.
Ej: (Fecha_finalizacion - Fecha_actual)/3600 = horas que faltan para que acabe la compo.

zupervaca

 si quieres salir de dudas crea una tabla que contenga un datetime obtenlo desde el php e impremelo en un html, veras que efectivamente son strings, no obstante el php y el sql permite realizar operaciones matematicas con ellos, por eso lo de strings camuflados

MA]Mestre

 Zupervaca
Citar¿por que no pones un consulta a una base de datos que contenga una fecha? a claro si la pones veremos que las fechas son strings, ains que cosas

Citarel SQL listener que mencionas en un servidor que traga strings sql, por mucho que adornes tu sabiduria todo esto que dices no niega en absoluto que el sql maneje strings para las fechas

Citarsi quieres salir de dudas crea una tabla que contenga un datetime obtenlo desde el php e impremelo en un html, veras que efectivamente son strings, no obstante el php y el sql permite realizar operaciones matematicas con ellos, por eso lo de strings camuflados

Lo de imprimir en html para ver que es un string es genial.  snif snif...

Todo esto se responde con:

CitarToda la sentencia ( transaccion ) sql se envia de forma integra al motor de oracle en formato string. Una vez alli, se valida la sintaxis de la sentència y se crea un plan de ejecución para resolver la consulta. Es en ese punto cuando los datos se formatean a su tipo correspondiente para comparaciones.

Que parte de la frase no entiendes ?

Ager
El datetime también es numerico en la gestion interna el motor sql. Piensa que sino no tendria sentido que estubiera limitado en su rango.

Por cierto mi sabiduria la adorno con el OCP de oracle y el MCBDA de Microsfot.  ;)


Whoiam

Cita de: "zupervaca"si quieres salir de dudas crea una tabla que contenga un datetime obtenlo desde el php e impremelo en un html, veras que efectivamente son strings, no obstante el php y el sql permite realizar operaciones matematicas con ellos, por eso lo de strings camuflados

:D  :D  :D


MA]Mestre olvidate no creo que lo hagas entrar en razón.

AgeR

 
Citar
Ager
El datetime también es numerico en la gestion interna el motor sql. Piensa que sino no tendria sentido que estubiera limitado en su rango.

Pues también es verdad  (nooo)  

zupervaca

 es que discutir esto es ridiculo, yo estoy hablando del lenguaje y tu hablas de la base de datos, yo te lo he dicho en un post anterior y sigues en las tuyas, el sql es un lenguaje para comunicarse con las bases de datos, sql significa structured query lenguage y trabaja con fechas en formato string, no se si sabras que el php es un generador de paginas web y ese es su principal motivo con lo que si puedes imprimir valores en un html, hay hasta clases hechas ya llamadas templates

la limitacion de la fecha la pone la propia bios y no el sql

MA]Mestre

 zupervaca
"...php es un generador de paginas web..."
"...la limitacion de la fecha la pone la propia bios y no el sql..."

puedes ampliar/desarrollar un poco mas estos conceptos, me intrigan  (genial)

Un saludo.



Degiik

Cita de: "zupervaca"Templates
Fechas en SQL
te pregunta por una cosa y le respondes otra neng.

a mi tambien me interesa eso de que el

...php es un generador de paginas web...

...la limitacion de la fecha la pone la propia bios y no el sql...

Porque no lo explicas un poco mejor ?  (genial)


P.D: que es el apache ?
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

zupervaca

 ¿es que no sabes leer? en los links lo ves perfectamente






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.