Foros del Web » Programando para Internet » PHP »

No me devuelve resultados en la condicion WHERE

Estas en el tema de No me devuelve resultados en la condicion WHERE en el foro de PHP en Foros del Web. Estoy en un proyecto PHP & Postgres, obtengo los valores de la tabla sin problemas pero al realizar una busqueda con WHERE, tengo que poner ...
  #1 (permalink)  
Antiguo 29/01/2015, 04:41
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 36
No me devuelve resultados en la condicion WHERE

Estoy en un proyecto PHP & Postgres, obtengo los valores de la tabla sin problemas pero al realizar una busqueda con WHERE, tengo que poner los valores tal y como estan en la db, respetando mayusculas y minusculas:
Por ejemplo, tengo un campo 'nombre_personas', y los valores son:

Alberto Perez Rodriguez
Manuel Rios Vargas
Maria Mendez Rodriguez

En la pagina, tengo una caja de texto que es la que le pasa los valores por GET a la consulta, si paso el valor "Perez", me devuelve el primer elemento, pero si paso "perez", me dice que no hay elementos que mostrar; si pongo "Rodriguez", me devuelve el primer y tercer elemento, pero si pongo "rodriguez", me dice igualmente que no hay elementos.

Que pudiera ser esto, aqui les dejo el codigo.

Ah, como detalle, probe directamente la sentencia SQL en el Postgres y tampoco me funciono, pero la lleve a MySQL y si me funciono. Me pueden ayudar a descifrar el problema.

Código HTML:
Ver original
  1. <form action="user_all.php" method="get">
  2. Criterio de busqueda:
  3. <input type="text" name="criterio">
  4. <input type="submit" value="Buscar">

Código PHP:
Ver original
  1. $criterio = "";
  2. $txt_criterio = "";
  3. if (isset($_GET["criterio"])!=""){
  4.    $txt_criterio = $_GET["criterio"];
  5.    $criterio = " WHERE nombre_personas LIKE '%".$txt_criterio."%'  ";
  6. }
  7.  
  8. $sql="SELECT * FROM tb_personas ".$criterio;
  9. $res=pg_query($sql);
  10. $numeroRegistros=pg_num_rows($res);
  11. if($numeroRegistros<=0)
  12. {
  13.    
  14.     echo "No se encontraron resultados.";
  15.    
  16. }else{
  17.  
  18.     echo "Se encontraron los siguientes resultados: <br/>";
  19.     echo $registro["nombre_completo"] ."<br/>";
  20.  
  21. }

Gracias...

Última edición por alexisverano; 29/01/2015 a las 04:52
  #2 (permalink)  
Antiguo 29/01/2015, 05:59
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: No me devuelve resultados en la condicion WHERE

Cita:
Ah, como detalle, probe directamente la sentencia SQL en el Postgres y tampoco me funciono, pero la lleve a MySQL y si me funciono. Me pueden ayudar a descifrar el problema.
El hecho de que en uno funcione y en el otro no puede estar causado por la definición de la tabla en cada uno. No te olvides que estás hablando de DBMS completamente distintos. No puedes pretender que tengan exactamente la misma estructura ni restricciones.
De hecho, si las columnas de MySQL las hubieses definido como de collation "utf8_bin", por ejemplo, tampoco te funcionaría.

En tu caso, si quieres que se omita la distinción de MAYUSCULAS/minusculas, lo que debes hacer es lo que se suele hacer: igualarlas...

En MySQL, Oracle y otros la solución es simplemente:
Código PHP:
$criterio "";
$txt_criterio "";
if (isset(
$_GET["criterio"])!=""){
   
$txt_criterio $_GET["criterio"];
   
$criterio " WHERE UPPER(nombre_personas) LIKE UPPER('%".$txt_criterio."%')  ";
}
 
$sql="SELECT * FROM tb_personas ".$criterio;
$res=pg_query($sql);
$numeroRegistros=pg_num_rows($res);
if(
$numeroRegistros<=0)
{
    
    echo 
"No se encontraron resultados.";
    
}else{
 
    echo 
"Se encontraron los siguientes resultados: <br/>";
    echo 
$registro["nombre_completo"] ."<br/>";
 

Nota que pongo cada componente de cadena en el WHERE con la funcion UPPER() de MySQL, la cual existe también en otros DBMS.
Creo que también existe en PosgreSQL...
__________________
¿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 29/01/2015, 06:05
 
Fecha de Ingreso: enero-2015
Mensajes: 35
Antigüedad: 9 años, 3 meses
Puntos: 1
Respuesta: No me devuelve resultados en la condicion WHERE

La solucion facil es convertir el campo a mayusculas en la consulta es decir:
SELECT * FROM tb_personas WHERE UPPER(nombre_personas) like '%mayuscula%'
o
SELECT * FROM tb_personas WHERE LOWER(nombre_personas) like '%minuscula%'

pero con esto estas sobrecargando tu consulta, cuyo impacto depende exclusivamente de la cantidad de registros de la tabla, mi recomendacion es que lo conviertas a mayusculas todos.
  #4 (permalink)  
Antiguo 29/01/2015, 09:21
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 36
Respuesta: No me devuelve resultados en la condicion WHERE

Gracias, gnzsoloyo; resolvi con tus consideraciones.

Etiquetas: devuelve, resultados, tabla
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 09:48.