LIKE con mysql (y php)

Responder
Mensaje
Autor
Avatar de Usuario
david_celta
Mensajes: 165
Registrado: 02/06/2005 11:00 pm

LIKE con mysql (y php)

#1 Mensaje por david_celta » 12/11/2007 5:02 pm

¿Haber alguien de por aqui sabe php con mysql, mas mysql que php o SQL o bases de datos?

Cuando se usa LIKE (me he dado cuenta que tambien ocurre en SQL) la cantidad de filas devueltas no es la correcta, alguien sabe ¿por que?

Probe un codigo SQL parecido a este:

consulta="select * from tabla where like campo '%$buscar%'"

Le ingreso cualquier palabra (incluso letras y cadena vacia) y SIEMPRE me devuelve 0 registros encontrados

Suponiendo:

consulta=mysql_query(...)
fila=mysql_fetch_assoc(...)
total=mysql_num_rows(...)

if(total==0)....
else// mostrar los registros

El problema es que siempre entra al if(total==0), pero se me ocurrio imprimir la fila (echo fila['campo'];) y me mostro un registro correcto

¿Alguna idea de porque sucede esto? (y como se solucionaría)

Es algo en la consulta supongo, porque cuando lo he probado en SQL server (la misma consulta) tampoco me devuelve el numero correcto de filas

Y si estoy equivocado, me dicen.
Falls of Rauros

Avatar de Usuario
grandzam
Mensajes: 184
Registrado: 10/02/2005 12:00 am
Ubicación: Guadalupe, Zacatecas, México
Contactar:

#2 Mensaje por grandzam » 12/11/2007 9:56 pm

Ahora no recuerdo bien pero creo que like va despues de campo:

Código: Seleccionar todo

consulta="select * from tabla where campo like '%$buscar%'";

ademas, le falto el $... a la variable consulta, pero creo que eso fue error de dedo cuando escribiste este mensaje. Checa bien de todos modos.


despues de eso intenta hacer:

imprime la variable $buscar;

Código: Seleccionar todo

echo "Buscar: ".$buscar;
Si la variable buscar no se imprime u ocurre algo extraño es porque no estas recibiendo bien la variable desde el formulario. Si es eso, entonces intenta:

Código: Seleccionar todo

$buscar=$_POST['buscar'];
o utilizando el método get:

Código: Seleccionar todo

$buscar=$_GET['buscar'];
si no es eso, entonces:

Código: Seleccionar todo

$resultado=mysql_query($consulta, $link);
donde $link es el link a la bd, bueno ya sabes...

enseguida intenta hacer esto:

Código: Seleccionar todo

echo "Numero de renglones: ".@mysql_num_rows($resultado);
y a ver que te sale...

ah y cierra la conexion una vez terminado lo que tengas que hacer con ella.

No se bien cual sea bien tu problema porque tendria que ver tu formulario, tu codigo, y tu tabla de la bd... pero tal vez sea algo de eso, sino ps vuelve a postear con los datos que tengas y ya veremos, a ver si alguien mas o yo mismo te podemos ayudar...

Avatar de Usuario
david_celta
Mensajes: 165
Registrado: 02/06/2005 11:00 pm

#3 Mensaje por david_celta » 14/11/2007 5:32 pm

Buenosi, like va despues pero ese no era el problema, en si el problema no es que no funcione, si funciona, es decir, hago la consulta con like y todo biemn hechecito y obtengo los resultados que quiero, excepto UNO: el numero total de filas (no me devuelve el valor que deberia)

Por Ejemplo: Todos los nombres que lleven una J en cualquier parte:

select nombres like '%J%'
(obviamente la J esta en una variable $buscar que se ingresa mediante una caja de texto y todo eso)

Me devuelve supongamos:
Juan
Jose
Julio
aJuar
baJito

Hasta ahi bien, pero si miro el total de filas (mysql_num_rows($resultado)) que me devuelve, me da 0 (cero, nada)

Entonces mi pregunta va mas por ese lado, porque si hace la consulta correctamente y obtiene los datos correctos, devuelve un numero de filas equivocado (lo cual genera el problema adicional si quiero mostrar esos datos por partes, ya que no tengo la cantidad exacta de filas, a menos que las cuente una por una)

Mi duda es referente a mysql_num_row() cuando se usa un LIKE '%$var%'
Falls of Rauros

Avatar de Usuario
grandzam
Mensajes: 184
Registrado: 10/02/2005 12:00 am
Ubicación: Guadalupe, Zacatecas, México
Contactar:

#4 Mensaje por grandzam » 17/11/2007 11:59 am

Hola, bueno tal vez sea algo de tu código, no se... Yo aca he hecho algo como lo que quieres y me funciona a la perfeccion.

Tengo una tabla que se llama attendee y dentro de ella tengo los siguientes datos en la columna FIRSTNAME:

Código: Seleccionar todo

Michael
Alan
Andy
Pete
Frank
Steve
Jeff
Michael
Michael
$buscar='t';
y si mi regla de busqueda es:

Código: Seleccionar todo

"Select * from attendee where FIRSTNAME like '%$buscar%'"
el numero de renglones debe ser igual a dos, estas de acuerdo? (Steve y Pete).

y si $bucar='n';

el numero de renglones debe ser igual a tres (Alan, Andy, Frank).

Y me da el resultado exsacto.

Aca te dejo la base de datos: http://preview7.awardspace.com/okokteam.net/demo1.sql

y también el código:

Código: Seleccionar todo

<?php 
function Conectarse() 
{ 
   if (!($link=mysql_connect("localhost","root",""))) 
   { 
      echo "Error conectando a la base de datos."; 
      exit(); 
   } 
   if (!mysql_select_db("demo1",$link)) 
   { 
      echo "Error seleccionando la base de datos."; 
      exit(); 
   } 
   return $link; 
} 

$link=Conectarse(); 
echo "Conexión con la base de datos conseguida.<br>"; 
$buscar='n';
$resultado=mysql_query("Select * from attendee where FIRSTNAME like '%$buscar%'",$link);

echo "<br>Registros: ".mysql_num_rows($resultado);

mysql_close($link); //cierra la conexion 
?>

Avatar de Usuario
david_celta
Mensajes: 165
Registrado: 02/06/2005 11:00 pm

#5 Mensaje por david_celta » 17/11/2007 12:59 pm

Pues si, funciona y es casi lo mismo a lo que estaba probando, excepto porque yo tengo la consulta dentro de un sprintf() con %%$b%%, aunque si la saco del sprintf y dejo %$b% sigue igual, o a lo mejor como dices, debe ser que por algun lado del codigo he colocado algo que me esta generando ese error.

Gracias por el codigo.
Falls of Rauros

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado