Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Usar alternativas de like

Estas en el tema de Usar alternativas de like en el foro de Mysql en Foros del Web. Estimados (as) resulta que tengo la siguiente consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT * FROM productos WHERE id = $id AND subcategoria LIKE ...
  #1 (permalink)  
Antiguo 04/10/2013, 14:00
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago de Chile
Mensajes: 164
Antigüedad: 11 años, 10 meses
Puntos: 1
Usar alternativas de like

Estimados (as) resulta que tengo la siguiente consulta:

Código MySQL:
Ver original
  1. SELECT * FROM productos WHERE id=$id AND subcategoria LIKE '%$categoria%'
Todo bien, pero quiero que muestre sólo los que calzan correctamente.

Por ejemplo:

24 LIKE 24 eso esta bien, pero tmabién me devuelve si la consulta es asi:

2 LIKE 24 eso no quiero que devuelva registros, quiero que cuando sea exactamente igual, el caso es que donde tengo que buscar es un campo que esta guardado en la base de datos de la siguiente forma.


Categoria : 24 - 25 - 26 - 27

Entonces al hacer la consulta con LIKE si mando un id con número 2, me va a devolver 4 filas, pero no debería devolver ninguna.

Alguna ayudita

Última edición por gnzsoloyo; 04/10/2013 a las 14:10 Razón: Trata de no gritar...
  #2 (permalink)  
Antiguo 04/10/2013, 14:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Usar alternativas de like

No uses LIKE.
LIKE es la muleta de los programadores que no conocen o no entienden de SQL, pero es una pésima solución, en especial cuando estas tratando con valores numéricos.
Esa cláusula se usa cuando se realizan búsquedas por proximidad, por parecido, pero un número no peude ser "parecido a". Eso no existe en matemática. Un numero es una magnitud escalar, y como tal debe ser tratada.
Puede ser igual, mayor, menor, diferente, en un rango o cosas así, pero no es "parecido a".

Además, LIKE opera sobre cadenas de caracteres, por lo que lo que está sucediendo es que MySQL convierte ambos valores en cadenas y las trata como tales, porque estás poniendo los numeros en un contexto e cadenas al usar esa clausula.
En otras palabras, si quieres algo que sea igual a un valor, o que esté en un grupo de valores, haz exactamente eso:
Código MySQL:
Ver original
  1. SELECT * FROM productos WHERE subcategoria = 24;

o bien
Código MySQL:
Ver original
  1. SELECT * FROM productos WHERE subcategoria IN(24);

QUe puede usarse para varios:
Código MySQL:
Ver original
  1. SELECT * FROM productos WHERE subcategoria IN(24, 25, 26, 30, 33);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, registros, select, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:10.