Cuál es la mejor forma de almacenar fechas en MySQL

Cuál es la mejor forma de almacenar fechas en MySQL

Buenas prácticas
¿Tenés que desarrollar una aplicación que maneja fechas? Tal vez un portal para reserva de turnos, o quizás algún sistema de membresías por tiempo limitado o por qué no un programa que le pregunte al visitante su fecha de nacimiento y le diga el signo del horóscopo chino al que pertenece. Más allá de cuál sea el objetivo de la aplicación en algún lado vas a necesitar almacenar fechas. Y ese lado será probablemente una base de datos relacional y, más aún, si estás usando PHP, seguramente sea MySQL. Existen varias opciones que podrías usar para definir el tipo de datos del campo en cuestión y la decisión puede no ser trivial. Usar un VARCHAR para almacenar un dato fecha Si bien técnicamente podrías guardar una fecha en un campo…
Leer más
Cómo insertar en MySQL desde PHP

Cómo insertar en MySQL desde PHP

Cómo hacer para...
Estás intentando guardar los datos de tu formulario en una base de datos, todo funciona bien salvo que... cuando vas a mirar tu tabla... nada por aquí, nada por allá. ¿Qué pasó? Ya buscaste en Google, ya probaste de todo y nada funciona. Estás desesperado y sentís que sólo estás tirando tiros a ciegas Calma Todo tiene solución :) A lo largo de este artículo conocerás los motivos más comunes de estos problemas pero primero debemos poner algunos puntos en común. Existen varios métodos para realizar una consulta a MySQL utilizando PHP pero a nivel conceptual todos hacen lo mismo: Establecer una conexión entre tu aplicación y el servidor MySQLGenerar el código SQL que corresponde con la operación que buscás realizarEnviar el comando a través de la conexiónEvaluar el resultado…
Leer más
Cómo resolver el Problema del N+1 en PHP y MySQL

Cómo resolver el Problema del N+1 en PHP y MySQL

Cómo hacer para...
Qué es el problema del N+1 Se trata de un problema de optimización de consultas a una base de datos. Imagina que tienes una base de datos con dos tablas: UsersPhoneNumbers Donde cada usuario puede tener muchos números telefónicos (Relación 1:N). Ahora, imagina que tienes que mostrar un listado de todos los usuarios junto con sus números de teléfono. Una forma de resolverlo sería utilizar una consulta tipo: SELECT * FROM users; Y luego: foreach ($users as $user) { $sql = "SELECT * FROM phone_numbers WHERE user_id = {$user->getId()};"; ... } Lo que sucede aquí es que realizamos una consulta para obtener todos los usuarios y luego, una más por cada uno. De ahí que el número total de consultas que se realizan es N (Número de usuarios) + 1.…
Leer más
Cuál es la diferencia entre SQL y MySQL

Cuál es la diferencia entre SQL y MySQL

Misceláneos
Vi esta pregunta en un grupo de Facebook: Y me llamó mucho la atención... claramente este amigo está bastante confundido y, como imagino que debe haber otros preguntándose lo mismo (o algo similar), me parece que vale la pena aclarar un poco los tantos :) Qué es SQL SQL es un lenguaje de programación diseñado especialmente para trabajar con bases de datos relacionales. Las siglas SQL significan Structured Query Language (Lenguaje estructurado de consultas). Una aclaración importante: la palabra "consulta" en español es sinónimo de pregunta o cuestionamiento... en el caso de las bases de datos (las relacionales al menos), cualquier operación (alta, baja, modificación o lectura) se denomina consulta. El lenguaje SQL fue inventado alrededor de la década de 1970 (algo que, en informática, es prácticamente la pre-historia) para trabajar…
Leer más

Cómo eliminar registros antiguos usando PHP y MySQL

Cómo hacer para...
Me llega este correo de un ex alumno:   Mauro como estás? Espero que muy bien! Sigo con el proyecto del centro cultural y quisiera saber si hay alguna forma de generar un script en sql que me borre los eventos que cargue a los cuales ya les haya pasado la fecha. Saludos,   Si quisiéramos adherir estrictamente a la pregunta, la respuesta sería "Sí"... pero sería un poco mala persona si lo dejara ahí, ¿cierto? :) Voy a profundizar un poco para no dejar a nadie con la intriga. Una forma de resolver el problema desde sql (Asumo que se trata de MySQL) sería generar un procedimiento almacenado o directamente tener a mano una consulta que hiciera lo que se busca: borrar los eventos a los que les haya pasado…
Leer más
Cómo hacer backups con MySQL

Cómo hacer backups con MySQL

Cómo hacer para...
Cuando una aplicación entra en producción (si no antes), resulta clara la necesidad de realizar backups. Por más que uno esté usando hostings virtualmente irrompibles (Como Digital Ocean), nunca se puede ser demasiado precavido. Por otro lado, seguro que el código de la aplicación que hiciste es una obra de arte digna del Louvre, pero, lo realmente importante son los datos que el cliente genera con ella (¡al menos para él!). Hay varias formas de resolver este problema, voy a nombrar algunas en orden de simplicidad decrecreciente (Es decir, empiezo por la más fácil :) ): Cómo hacer backups usando MySQL WorkBench Desde la pantalla principal (Una vez conectado a un servidor) Arriba a la izquierda encontramos el menú "Management": De ahí tenemos la opción "Data Export": Eso nos lleva…
Leer más
Cómo almacenar archivos en una base de datos MySQL

Cómo almacenar archivos en una base de datos MySQL

Cómo hacer para...
Un clásico problema de una aplicación web es el almacenamiento de archivos subidos por los usuarios (Sus fotos por ejemplo). Si bien teóricamente se puede realizar sin mayores inconvenientes (Al fin y al cabo, un archivo digital no es más que una colección de datos binarios), es sumamente ineficiente hacerlo. Veamos cómo sería esto: Primero que nada, habría que manejar de alguna forma el upload de archivos, pero, asumiendo que el archivo ya está disponible para php se podría pensar en almacenarlo dentro de la base de datos utilizando algún campo tipo BLOB. Un problema inmediato que surge de tomar esta opción es que la base de datos crecerá mucho si el sistema es muy utilizado, lo cual impactará negativamente en su rendimiento, hará más costozos los backups, etc... Una…
Leer más