El 14 de agosto de 2008 9:12, Fernando G.
[email protected]escribió:
Y por qué no, simplemente, como me decÃa nuestro amigo Blat:
self.created_at_inverse = Time.local(2038,01,01,00,00,00).to_i -
Time.now.to_i
O optimizando:
self.created_at_inverse = 2145913200 - Time.now.to_i
Pues también, más rápido…
O como he resumido yo:
self.created_at_inverse = -(Time.now.to_i)
No entiendo esa fijación de que este campo sea siempre positivo (hasta el
2038).
Según Pablete, lo de que el Ãndice sea positivo es porque MySQL tarda en
ordenar a la inversa. O sea que si se lo das ya en positivo, no tiene
que
darle la vuelta a la tabla:
2030 - 2008 = 2022
2030 - 2009 = 2021
2030 - 2010 = 2020
2030 - 2011 = 2019
que ya vienen ordenados como nos interesa: 2019, 2020, 2021, 2022
En cambio en tu solución:
-2008
-2009
-2010
-2011
que ordenados queda -2011, -2010, -2009, -2008 con lo que MySQL tiene
que
darle la vuelta para tenerlos como nos interesa, lo más reciente
primero.
Supongo que en ambos casos se nota la optimización al ser un integer en
lugar de una fecha pero me parece que la gracia está en que ya el indice
venga ordenado y asà evitarle el trabajo de darle la vuelta.
Tiene la desventaja de que en el 2030 deja de funcionar bien el orden,
pero
ya me he apuntado en mi calendario del 2029 repasar este truco y
actualizarlo