Buscar en un campo separado por comas en MySQL

by Zilus on 2/03/2010

Debido a un desarrollo en el que actualmente trabajo, me tope con esto que resulto ser muy sencillo de hacer, pero no esta tan documentado como se espera. Que pasa si tienes un campo con cadenas de texto o enteros separados por coma, como categorías, nombres etc.

Un ejemplo practico seria,  el campo “cats” tiene un contenido como ’2,11,10,1,16′, si usamos el tradicional LIKE:

SELECT * FROM tabla WHERE cats LIKE '1';

Se podría pensar que esta solución es adecuada pero no es así, ya que nos devolvera:

cats:

  • 11
  • 10
  • 1
  • 16

Para lograr obtener solo el ’1′ y no todos los números que contengan el ’1′ se debe utilizar esta sintaxis:

SELECT * FROM tabla WHERE FIND_IN_SET('1', cats)

En el ejemplo práctico ‘tabla’ es el nombre de la tabla en la que queremos buscar y ‘cats’ el nombre del campo.

neozilus@gmail.com
  1. 23/12/2010haLckoNiCka MEXICO Windows XP Opera 9.80 says:

    GRACIAS!

    y como añadido, puedo decir que dicha función regresa el INDICE del caracter encontrado, pero dicho indice empieza desde 1, y no en 0 { cero } como usualmente se maneja en programación.

  2. 2/01/2011Zilus MEXICO Mac OS X Mozilla Firefox 3.6.12 says:

    Eso no lo sabia, gracias haLckoNiCka!

  3. 4/01/2011Daniel URUGUAY Windows XP Google Chrome 8.0.552.224 says:

    Esto no funciona?

    SELECT * FROM tabla WHERE cats LIKE %1%;

  4. 6/01/2011Zilus MEXICO Mac OS X Mozilla Firefox 3.6.8 says:

    @Daniel, no, porque eso te puede regresar: 1 ó 11 ó 111 etc, inclusive te regresa 12.

    Esto porque % es como *, es como si buscaras *1*

  5. 19/05/2011Me salvaste la vida UNITED STATES Windows 7 Mozilla Firefox 4.0.1 says:

    ya también busqué la manera de extraer datos de mi script de noticias, pero yo uso dos campos para las categorías, una cat y cats , en cat es para seleccionar solo una que me servirá para hacer el link amigable y cats que me servirá para que la noticias aparezca en distintas listas de categorías.
    GRACIAS POR ESE TUTORIAL!

Write a comment: