| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
david_celta
Registrado: 02 Jun 2005 Mensajes: 165
| Publicado: 12/11/2007 5:02 pm | | | Título: LIKE con mysql (y php) |
| ¿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 |
| | Volver arriba | |  | grandzam

Registrado: 10 Feb 2005 Mensajes: 184 Ubicación: Guadalupe, Zacatecas, México
| Publicado: 12/11/2007 9:56 pm | | | Título: |
| Ahora no recuerdo bien pero creo que like va despues de campo:
| Código: | 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: | 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: | $buscar=$_POST['buscar']; |
o utilizando el método get:
| Código: | $buscar=$_GET['buscar']; |
si no es eso, entonces:
| Código: | $resultado=mysql_query($consulta, $link); |
donde $link es el link a la bd, bueno ya sabes...
enseguida intenta hacer esto:
| Código: | 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... |
| | Volver arriba | |  | david_celta
Registrado: 02 Jun 2005 Mensajes: 165
| Publicado: 14/11/2007 5:32 pm | | | Título: |
| 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 |
| | Volver arriba | |  | | grandzam

Registrado: 10 Feb 2005 Mensajes: 184 Ubicación: Guadalupe, Zacatecas, México
| Publicado: 17/11/2007 11:59 am | | | Título: |
| 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: | Michael Alan Andy Pete Frank Steve Jeff Michael Michael |
$buscar='t'; y si mi regla de busqueda es:
| Código: | "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:
y también el código:
| Código: | <?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 ?> |
|
| | Volver arriba | |  | david_celta
Registrado: 02 Jun 2005 Mensajes: 165
| Publicado: 17/11/2007 12:59 pm | | | Título: |
| 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 |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |