Category Archives: mysql

actualizar campo fecha con hora en mysql

Si tenemos en una tabla un campo para fecha y otro para hora:

y cambiamos el tipo de fecha de date a datetime todas las horas se quedan como 00:00:00

actualizamos el valor con la sentencia;:

UPDATE tabla
SET fecha = CONCAT_WS(‘ ‘,date(fecha),hora)

Y nos queda en un solo campo la fecha con la hora

 

actualizar campo tabla mysql por orden de otra columna

Si despues de tener una tabla queremos añadir una columna para indicar un orden, podemos actualizarla tabla usando update con inner join

UPDATE
tabla YT
INNER JOIN
(SELECT
id,
@rowNumber := @rowNumber + 1 AS rn
FROM tabla , (SELECT @rowNumber := 0) var
where campofiltro=4
ORDER BY id ASC
) AS t
ON YT.id = t.id
SET YT.nuevacolumna = t.rn where campofiltro=4

Pensando en cambiar de hosting

Será porque hoy es sábado y voy bien de tiempo con mis proyectos que tengo a medias, pero hoy me apetece escribir una entrada mas larga.

Llevo tiempo con mi pagina web en 1and1, y creo que es el momento de pensar si es el mejor hosting en el que puedo tener no solo el blog, sino todas las paginas correspondientes a mis aplicaciones móviles, tanto de IOS como de Android, ademas de aquellas necesarias para el correcto funcionamiento de varias aplicaciones que he desarrollado a lo largo de los años.

Ultimamente he desarrollado varias aplicaciones como Datercam para Android ( ya existía para IOS) que permite poner información como la fecha, la hora, las coordenadas gps y la ubicación ( obtenida mediante google ) a las fotos, para que no olvides cuando y donde hiciste una foto.

O mi ultima aplicación Emojime publicada hace 3 días, que permite coger una foto, bien sea de la cámara o del carrete, detectar las caras y cargar emoticonos de forma aleatoria, lo que permite “jugar” a encontrar la combinación de caras que mejor se adapte a la foto, una vez tienes el resultado puedes compartirla o guardarla.

Pero volviendo al tema con el que empece, últimamente he tenido problemas con mi pagina en 1and1, momentos en los que no puede acceder, errores internos del servidor ( que luego no dan mas información ) o simplemente que la velocidad no es la deseada.

A eso se junta que hace tiempo me cambiaron la tarifa de forma unilateral, después de 8 años con ellos ya no podían mantenerme el contrato que tenia con ellos, y me pasaban a uno superior ofreciendo cosas que no necesito y con ello un aumento de precio considerable.

Otro de los motivos por los que tengo que pensar en cambiar de hosting es que me gustaría que tuviera acceso a la base de datos de forma nativa mediante host y puerto, mientras que ahora solo puedo acceder mediante phpmyadmin una vez que me he logueado en el panel de control, lo que relentiza bastante el trabajo con base de datos.

Hace unos días que encontré un articulo  donde hablaban de tres hosting baratos y exponían una serie de pruebas que habian hecho para valorar cual era la mejor, los tres candidatos eran: Webempresa, Raiola y Sered, y las pruebas que realizaban eran: benchmark, velocidad de renderización, estabilidad del servidor o load impact entre otros.

Aquí me pilla de novato, pues no tenia ni idea de en que consistían muchas de las pruebas que se realizaban, pero me ha servido para aprender mas acerca de los pasos necesarios para que tu web esté en un hosting capaz de soportar cargas sin que el usuario se vea afectado. Es mas creo que estas pruebas pueden ser aplicadas en mi puesto de trabajo y se lo comentaré a la gente de sistemas para organizar un plan de actuación.

Aunque en el articulo si mostraban un ganador, como en casi todas las comparativas  cada una de ellas destacaba en algún punto por lo que el resultado no era fácil de determinar.

Como en el articulo no hablaban de si el acceso a base de datos era con phpmyadmin o si por el contrario permitían acceso directo no me queda mas remedio que preguntarlo directamente, recurro a llamar por teléfono y quedo a la espera, en unos segundos me atiende un empleado muy amable que me responde a mi gran duda, y la respuesta es afirmativa, CPANEL permite habilitar conexión externa con la base de datos, por lo que acaba de convencerme para tomarlo como claro candidato a ser mi proximo hosting, a ver si el proximo post ya está ahí alojado.

 

 

Reiniciar autoincremento en mysql

Si tenemos una tabla (nombredelatabla) con la clave autoincremental, con los valores:
1 pepito
2 jaimito
3 equivocado

Si borramos el 3, cuando queramos insertar un valor nos pondrá el 4.

para poder reutilizar el 3, tenemos que modificar la tabla:

Alter table nombredelatabla auto_increment=3

Donde el número es el que queremos que sea el siguiente

Evitar fechas 00/00/0000 con mysql

Cuando trabajamos con fechas en mysql se guardan en formato yyyy-mm-dd mientras que normalmente en pantalla las queremos ver en formato dd/mm/YYYY.

Para ellos vamos a ver las consultas necesarias para guardar y recuperar los datos y evitar que nos aparezcan datos 00/00/0000

Cuando recuperamos el valor ponemos en la sql

if(fecha is not null,date_format(fecha,'%d/%m/%Y'),'') as fec

Si llamamos siempre a date_format cuando el valor es null el resultado es 00/00/0000

Y a la hora de guardar solo formateamos la fecha si tiene valor

update la_tabla_que_sea set
 fecha=if ('".$_POST['campo_fecha_web']."'!='',str_to_date('".$_POST['campo_fecha_web']."','%d/%m/%Y'),null)
where id=id_necesario_para_actualizar

Con esto evitamos llamar a str_to_date si el valor está vacio, que es lo que origina que se guarde el 00/00/0000

Generar un numero aleatorio en sqlite

La función random() de sqlite devuelve un numero entre -9223372036854775808 y +9223372036854775807
Para obtener números solo positivos y con valores mas normales podemos utilizar la expresión:

ABS(RANDOM() % n_max)

Donde n_max indica el valor máximo que queremos para el random.

Insert or update

Creamos una tabla con un varios campos.
unique1

Creamos un indice único sobre el campo email
unique2

Ahora insertamos el primer valor, lo importante es el email:
unique3

Ahora intentamos insertar un nuevo registro pero manteniendo el mismo email:
unique4

Evidentemente nos tiene que fallar, pues el indice único está funcionando
unique5

Por ultimo modificamos la consulta y le añadimos una condición para que nos actualice uno de los datos en el caso de intentar un insert con una clave unica, por lo que ya no nos dará el error:
unique6

insert into usuarios (nombre,email,clave,fechains) 
values ('Prueba duplicate','prueba@prueba.com','clavenueva',now())
on duplicate key update fechains=now()

Trabajar con fechas en sqlite

Las bases de datos SQlite no tienen el tipo date por lo que las fechas se tienen que guardar como text.

Si queremos trabajar con fechas para buscar las que cumplan que sean mayores a …. etc, podemos utilizar la conversión a fecha del tipo yyyymmddhhiiss

Dada una tabla con los valores de fecha y hora:
sqlite1

Podemos ejecutar una consulta como :

select fecha,hora,id
from notificaciones 
where substr(fecha,7)||substr(fecha,4,2)||substr(fecha,1,2)||substr(hora,1,2) ||substr(hora,4,2) ||substr(hora,7,2)
> '20150901140920'

Que nos devuelve uno tal y como se esperaba