Crea tu propio acortador de enlaces con API en PHP y Mysql

tabla de links

Un acortador de enlaces es una herramienta que permite de enviar direcciones de webs a través de las redes sociales ahorrando espacio en el mensaje. Se popularizaron mucho con twitter ya que solo se dispone de 140 caracteres por mensaje.

Hay muchísimos acortadores de url en internet, algunos son bit.ly, tinyurl, goo.gl, …

¿Porque tener un acortador de urls propio?

Por independencia sobre todo, ¿que pasaría si [pon aquí tu acortador de urls preferido] le diera por poner publicidad antes de ir a la pagina de destino? ¿y si tu quieres poner publicidad? ¿y si no te fías de las estadísticas que te dá o de como las calcula?

Pero lo que realmente me convenció a hacerlo: ¿realmente para una redirección necesito usar un servicio externo? Quiero decir: ¿que valor añadido saco de tener bit.ly/aAaAaA comparado con link.xhiena.net/aAaAaA o xhiena.net/link/aAaAaA?

A parte de que es mas corto no saco nada más, pero sinceramente, link.xhiena.net/aAaAaA es mas corto que xhiena.net/index/crea-tu-propio-acortador-de-enlaces-con-api-en-php-y-mysql

(más…)

Error de mysql: #1093 – You can’t specify target table ‘TABLENAME’ for update in FROM clause

Ayer en el curro me encontré con este error de mysql:

#1093 - You can't specify target table 'categories' for update in FROM clause

Estaba trabajando con la base de datos del oscommerce, quería borrar las categorías que no tuvieran ni categorías ni productos en su interior.

La sql es algo asi:

Delete from categories where
             (categories_id not in (select distinct(categories_id) from products_to_categories)
             and (categories_id not in (select distinct(parent_id) from categories)

Se que seria mas efectivo con EXISTS pero ese no es el tema ahora.

Es una condición simple, la primera parte evalúa si tiene algún producto y la segunda si tiene algún hijo (mas bien si alguna la tiene como padre), si la conviertes en select aparecen todos los productos que no tienen ni categorias hijas ni productos en su interior.

Pero MySql devuelve el error #1093.

Y que significa ese error?

Ese error significa que, en MySql, no puedes borrar ni editar una tabla si en las subconsultas consultas esa tabla. En la última linea de la documentación de MySql sobre el update dice:

Currently, you cannot update a table and select from the same table in a subquery.

En mi consulta para consultar si tiene categorias hijas consulto la misma tabla que quiero borrar, y como se comprenderá, no quiero borrar sólo las categorías sin productos porque tengo categorías contenedor que solo tienen categorías hijas…

La solución más elegante que encontré fue crearme una tabla auxiliar:

CREATE TABLE categorias_a_borrar (
      id INT
 );

y rellenarla con los ids de las categorias que queria borrar:

Insert into categorias_a_borrar
      select categories_id from categories where
              (categories_id not in
                     (select distinct(categories_id) from products_to_categories)
                     and (categories_id not in (select distinct(parent_id) from categories)

y después borrar las categorías:

Delete from categories where
               categories_id in (select id from categories_a_borrar)

Espero que le ahorre algo de tiempo a alguien :D

Entornos AMP (apache+php+mysql) recomendaciones de configuración

un entorno AMP (LAMP en GNU/linux, WAMP en windows,…)es un programa conjunto de programas que te permiten tener un servidor de páginas web.

Suelen traer un apache+php+mysql con el phpmyadmin y el sqliteadmin. La configuración por defecto es basiquísima, que suele resumirse en root sin contraseña, y carpetas por defecto

Yo me lo instale para alojar mi pesteproyecto de página web, y para probar algún cms que otro ver como están hechos y cosas de esas (esa mala manía de aprender cosas que no sirven para nada, andá si gracias a eso tengo trabajo actualmente!).

Aunque sea un entorno de pruebas, se debe configurar bien. Porque si no, un día de estos llegará google, y vera que tienes un servidor, y te indexará como sólo el sabe. y alguien aburrido de cualquier país le dara por buscar en google: “intitle:wamp5 homepage” y que pasará? esto:

wamp5 homepage

(Pincha para ver)

Lo he descubierto gracias al google analitycs xD en la sección de palabras con las que llegan a tu web xD

Así que voy a dar una serie de consejos o recomendaciones cuando instalas un server web (Aunque sea un entorno de pruebas, que empieza siendo un entorno de pruebas y luego… chupa chupa que yo te aviso…):

(más…)