Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Sentencia sql "like" en php

Estas en el tema de Sentencia sql "like" en php en el foro de PHP en Foros del Web. Hola amigos, me gustaria como hacer una sentencia like de sql para que sea sensitiva a las mayusculas. La sentencia SQL es Código PHP:    $sql  ...
  #1 (permalink)  
Antiguo 17/06/2014, 13:00
 
Fecha de Ingreso: julio-2013
Ubicación: Vic
Mensajes: 26
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Sentencia sql "like" en php

Hola amigos,
me gustaria como hacer una sentencia like de sql para que sea sensitiva a las mayusculas.
La sentencia SQL es
Código PHP:
   $sql mysql_query("SELECT * FROM x WHERE nombre LIKE ('%$b%')",$con); 
Si en la base de datos hay por ejemplo "Patatas" y le paso "patatas" no me encuentra nada, como lo puedo hacer?
Muchas Gracias
  #2 (permalink)  
Antiguo 17/06/2014, 13:01
 
Fecha de Ingreso: julio-2013
Ubicación: Vic
Mensajes: 26
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Sentencia sql "like" en php

Se me olvido decirlo, mi proyecto es un cercador AJAX con PHP y MySQL
  #3 (permalink)  
Antiguo 17/06/2014, 13:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Sentencia sql "like" en php

Eso sería tema de SQL, no es algo que soluciones con código PHP, procura preguntar en el lugar correcto.

Por algo "LIKE" es un operador de SQL y nada tiene que ver con código PHP.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 17/06/2014, 14:23
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Sentencia sql "like" en php

Puedes usar expresiones regulares en SQL:

Código SQL:
Ver original
  1. "SELECT * FROM x WHERE nombre REGEXP '/{$b}/i';"
__________________
Salu2!
  #5 (permalink)  
Antiguo 17/06/2014, 14:24
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: Sentencia sql "like" en php

"Patatas" y "patatas", desde cierto punto de vista son idénticas para MySQL. Pero si la collation de ese campo está definida para diferenciar mayúsculas de minúsculas, entonces deberás cambiar alguna cosa.
Ese sería el caso, por ejemplo de collations del tipo utf8_general_ci / utf8_general_bin.
Nota en el ejemplo que el sufijo cambia según sea character insensitive o binary (binaria). La primera no diferencia entrws mayusculas y minúsculas, pero la segunda si.
Además, puedes tener problemas si los CHARSET son diferentes.

http://dev.mysql.com/doc/refman/5.5/...ollations.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 17/06/2014, 14:27
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Sentencia sql "like" en php

Perdon... es asi

Código SQL:
Ver original
  1. "SELECT * FROM x WHERE nombre REGEXP '{$b}';"

(no recordaba mucho la sintaxis)
__________________
Salu2!
  #7 (permalink)  
Antiguo 17/06/2014, 20:40
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Sentencia sql "like" en php

Lo que propone @gnzaloyo es una solucion muy elegante, pero que tiene un pequeño detalle que es que si cambias el charset, esto afectara a todas las partes de tu sistema volviendo insensible a mayusculas ese campo en cualquier consulta, lo cual, si bien soluciona tu problema particular, puede que te genere problemas a futuro.

Aca van dos soluciones alternativas, la primera desde Mysql:
Código PHP:
Ver original
  1. $sql = mysql_query("SELECT * FROM x WHERE LOWER(nombre) LIKE LOWER('%$b%')",$con);

y la segunda con algo de php:

Código PHP:
Ver original
  1. $b = strtolower($b);
  2.   $sql = mysql_query("SELECT * FROM x WHERE LOWER(nombre) LIKE ('%$b%')",$con);

La primera me parece la mas viable en lo que a prolijidad respecta, y como no puede ser de otra forma, aqui van dos opciones analogas de las primeras:

Código PHP:
Ver original
  1. $sql = mysql_query("SELECT * FROM x WHERE UPPER(nombre) LIKE UPPER('%$b%')",$con);
y
Código PHP:
Ver original
  1. $b = strtoupper($b);
  2.   $sql = mysql_query("SELECT * FROM x WHERE UPPER(nombre) LIKE ('%$b%')",$con);
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: mysql, select, sentencia, sql
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:43.