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

Poner un LIKE en un IN

Estas en el tema de Poner un LIKE en un IN en el foro de Mysql en Foros del Web. Tengo esta parte de una cadena MySQL la cual me busca si esa variable está en cualquiera de esos campos. Pero yo quiero usar algo ...
  #1 (permalink)  
Antiguo 01/11/2012, 14:00
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Poner un LIKE en un IN

Tengo esta parte de una cadena MySQL la cual me busca si esa variable está en cualquiera de esos campos. Pero yo quiero usar algo como LIKE y no que busque el término exacto.

AND '$Especialidad' in (opc, opd, osp, comisiones, ...)
  #2 (permalink)  
Antiguo 01/11/2012, 14:15
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, 4 meses
Puntos: 2658
Respuesta: Poner un LIKE en un IN

No se puede usar de esa forma.
IN() requiere datos específicos, y no necesariamente se trata ni de cadenas, ni tampoco números. IN() Puede estar evaluando registros, grupos de columnas, o conjuntos de datos separados por comas, en cambio LIKE sólo compara cadenas, y no campos, por lo que el algoritmo de su funcionamiento es completamente diferente.
En todo caso, lo que deberías considerar sería usar lo que se denomina "expresiones naturales", tema que ya se ha respondido en este foro varias veces.
Busca el tema con el buscador del foro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 01/11/2012, 14:28
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Poner un LIKE en un IN

Le hice así y me funciona a medias:

Lo que sucede es que pareciera que me hace las búsquedas exactas y no con LIKE. Por ejemplo, en la base de datos aparece "ECONOMÃA,SEMARNAT" y se supone que si busco SEMARNAT, con el LIKE me la va a tomar como válida y no lo hace.

Código MySQL:
Ver original
  1. SELECT * FROM wp_consultte
  2.        Titulo = '$Titulo'
  3.        AND (OPC LIKE '$Especialidad' OR
  4.        OPD LIKE '$Especialidad' OR
  5.        OSP LIKE '$Especialidad' OR
  6.        Comisiones LIKE '$Especialidad' OR
  7.        Regulaciones LIKE '$Especialidad' OR
  8.        Programas LIKE '$Especialidad' OR
  9.        Regimenes LIKE '$Especialidad' OR
  10.        Ordenamiento LIKE '$Especialidad' OR
  11.        Negociadores LIKE '$Especialidad' OR
  12.        Logistica LIKE '$Especialidad'
  13.        )
  14. LIMIT $inicio , $TAMANO_PAGINA

Última edición por gnzsoloyo; 01/11/2012 a las 14:57 Razón: Erorr de comillas
  #4 (permalink)  
Antiguo 01/11/2012, 15:33
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: Poner un LIKE en un IN

Solucionado

Ya pude solucionar el problema. Aquí les dejo la respuesta:

Código MySQL:
Ver original
  1. FROM wp_consultte
  2.       Titulo = '$Titulo'
  3.       AND (OPC LIKE '%$Especialidad%' OR
  4.       OPD LIKE '%$Especialidad%' OR
  5.       OSP LIKE '%$Especialidad%' OR
  6.       Comisiones LIKE '%$Especialidad%' OR
  7.       Regulaciones LIKE '%$Especialidad%' OR
  8.       Programas LIKE '%$Especialidad%' OR
  9.       Regimenes LIKE '%$Especialidad%' OR
  10.       Ordenamiento LIKE '%$Especialidad%' OR
  11.       Negociadores LIKE '%$Especialidad%' OR
  12.       Logistica LIKE '%$Especialidad%'
  13.       )

Cuando usas LIKE si la coincidencia es al principio usas 'especialidad%' si va al final, es %especialidad, y si la quieres encontrar en cualquier parte de la cadena la usas así %especialidad%.

Última edición por gnzsoloyo; 01/11/2012 a las 17:30

Etiquetas: sql, campos
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 05:18.