varios subconsultas soporta segundo por optimizar lentas cuantas consultas consulta con anidadas mysql database-design

mysql - soporta - subconsultas eloquent laravel



Almacenamiento día y mes(sin año) (3)

Tengo problemas para encontrar la mejor manera de almacenar algunos datos en mi base de datos. Tengo que almacenar las fechas DD / MM en una base de datos, pero no estoy seguro de la mejor manera de almacenar esto para que pueda ser fácilmente ordenado y buscado.

Básicamente, un usuario podrá guardar fechas importantes en el formato DD / MM, que se recordarán más cerca del día.

El tipo de datos DATE no parece completamente apropiado ya que incluye el año, pero no puedo pensar en otra forma de almacenar estos datos. Sería posible incluir un año específico hasta el final de todas las ocasiones, pero esto casi no parece correcto.


Tengo que almacenar las fechas DD / MM en una base de datos, pero no estoy seguro de la mejor manera de almacenar esto para que pueda ser fácilmente ordenado y buscado.

La mejor forma de almacenar datos de fecha, incluso si el componente de año no es obligatorio, es usar la fecha. Cuando necesite usarlo, puede eliminar el año o reemplazarlo por el año comparado con el año actual.

Tenerlo en la columna de fecha facilita la clasificación correcta, la integridad, la validación, etc.

Para abastecer los años bisiestos, use un año como ''0004'' que permite ''0004-02-29''. Usar el año 4 lo hace un poco más complicado que el año 0, pero a modo de ejemplo, esto convierte la fecha ''29 -Feb ''(año agnóstico) en una fecha en este año para compararla con algún otro campo

select adddate( subdate(cast(''0004-02-29'' as date), interval 4 year), interval year(curdate()) year) result: 2011-02-28


¿Estas fechas son recurrentes? Si no, ¿cómo mantendrá un registro de cuándo ha "caducado"? Si la respuesta es "la aplicación eliminará manualmente las fechas una vez que hayan expirado", ¿por qué no simplemente almacenar la fecha DD/MM como la siguiente instancia disponible de esa fecha? Por ejemplo:

01/02 convierte en 2012-02-01 , y 04/07 convierte en 2011-07-04

Las funciones incorporadas de fecha / hora son tan útiles que recomiendo encarecidamente que no use varchars o tinyints .


Si realmente desea dejar el año, simplemente haga DOS columnas, una por día y otra por mes. Luego guárdalos por separado.

CREATE TABLE `table-name` ( `Day` tinyint NOT NULL, `Month` tinyint NOT NULL );

Pero, es mucho mejor usar el tipo de Date y luego ignorar el año en tu código.