MySQL: arreglando un UNIQUE perdido
SELECT slug, id FROM posts WHERE id NOT IN ( SELECT p.id FROM ( SELECT DISTINCT slug, id FROM posts GROUP BY slug ) AS p );El bug surge por no haber puesto un campo único como tal. Supongamos que el campo slug1) de cada noticia no es único e introducimos dos slugs iguales: tenemos un problema.
Una vez nos hemos dado cuenta y queremos corregir el error, lo primero es saber el número de filas afectadas para aplicar el parche, tarea que en un principio parecía sencilla hasta que piensas en cómo hacerlo sin usar PHP -no tendría la misma gracia-. Diversión asegurada:
- Primero seleccionamos todos los slugs distintos y nos quedamos con su id: SELET .pid FROM (SELECT DISTINCT slug, id FROM posts GROUP BY slug) as p
- Usamos esa subconsulta para seleccionar los que NO aparecen en ella: SELECT slug, id FROM posts WHERE id NOT IN (consulta1)
1) Slug: Dícese -en entornos de desarrollo- del campo que guarda en base de datos la url accesible de un título de noticia, por ejemplo el slug de una noticia "Bienvenidos a mi Blog" podría ser "bienvenidos-a-mi-blog.html". Con lo que es más que interesante que la información no esté duplicada.
Comentarios
SELECT slug, COUNT(slug)
FROM posts
GROUP BY slug
HAVING ( COUNT(slug) > 1 )
MySQL is beautiful :_)