Buenas.
Estoy haciendo una consulta usando la variable LIKE '%muestra%' para buscar algo dentro de mi pagina, y que esto se asocie con la "muestra" de palabra que me haya proporcionado el usuario desde el INPUT de busqueda.
La busqueda se realiza con exito (consulta a mysql), la sintaxis esta bien y todo... el problema es que al momento de mostrar los resultados (mysql_fetch_array()) me omite el primer elemento de la consulta. Vaya, si la consulta a mysql me dio 4 resultados, me omite el primer elemento.
ejemplo:
<?php
$q= "select * from NOTICIAS where TITULO LIKE '%piedra%' ORDER BY TITULO ASC;";
$link= conectarmysql();
$query= mysql_query( $q, $link ); # consultamos
# imprime "Resultados Encontrados: 4"
echo 'Resultados Encontrados: '. mysql_num_rows($query);
# ahora a listar
$c=0; # un contador
while( $buf=mysql_fetch_array($query) )
{
echo $buf["TITULO"]. '<br><hr>';
$c++;
}
# imprime "Resultados Listados: 3"
echo 'Resultados Listados: '. $c;
?>
En busca de ver cual era el problema, me tope conque omite el primer elemento encontrado ya que realice la sentencia de consulta exacta en PHPMyAdmin y me arroja los 4 resultados, pero el PRIMERO de la lista no lo imprime mi codigo.
Por ello digo que "omite el primer elemento de la busqueda".
Espero puedan ayudarme !
IMPORTANTE: esto solo ocurre con busquedas, ya que la operaciones normales como "ver una sección del blog" o cualquier cosa que demande consultar a MySQL algo, si se encuentran 10 resultados, los 10 salen impresos... Repito: solo sucede cuando hago una busqueda.
Saludos !
Sera porque el contador empieza desde 0 :silbar:, la verdad no entendi mucho
Cita de: Alex Jurado en 11 Octubre 2013, 21:56 PM
Sera porque el contador empieza desde 0 :silbar:, la verdad no entendi mucho
._.
@Diabliyo
comenta la siguiente línea y verifica que pasa ;)
echo 'Resultados Encontrados: '. mysql_num_rows($query);
Alex Jurado por favor evita contestar al tema si no entiendes, creo que es muy claro, de los 4 resultados solo imprime los ultimos 3, el primero no sale listado.
Ejm: Esta es la Tabla en MySQL.
*----------------*
| TITULO |
*----------------*
| piedra1 |
| piedra2 |
| piedra3 |
| piedra4 |
*----------------*
El resultado del codigo que puse arriba da:
Resultados Encontrados: 4
piedra2
piedra3
piedra4
Resultados Listados: 3
Darhius pues es obvio, solo no sale el texto "Resultados Encontrados: 4". Eso obviamente no resuelve nada :S
Lo raro es que solo sucede cuando hago busquedas, osease, cuando se llama a la consulta con LIKE '%muestra%'. Si entro simplemente a ver las noticias del blog (sin busqueda), salen los 4 elementos impresos.
Saludos !
Lo tengo exactamente como tú lo tienes, mira: -PASAME UN SCRIPT DE LA TABLA-
Código:
$cnn = mysql_connect("127.0.0.1", "root", "");
mysql_select_db("dbPoC", $cnn);
$sql = "SELECT * FROM usuarios WHERE nick LIKE '%piedra%'";
$query = mysql_query($sql, $cnn) or die("error:".mysql_error());
echo 'Resultados Encontrados: '. mysql_num_rows($query)."<br/>";
$contador = 0;
while($row = mysql_fetch_array($query)):
echo $row["nick"]."<br/>";
$contador++;
endwhile;
echo 'Resultados Listados: '. $contador;
Resultado:
Resultados Encontrados: 4
piedra1
piedra2
piedra3
piedra4
Resultados Listados: 4
PD: jaja el comentario de ahora, es que estaba beodo :p
Buen dia...
Gracias por tu respuesta Alex Jurado, pero me puse a analizar con lupa mi codigo y encontre algo que pues me tiene con la duda.... Antes explico algo importante.
La tabla donde guardo las noticias tiene estos tres campos mas:
TITULO --> donde se guarda el titulo del post.
VISTA --> su valor puede ser "post", "page", "gallery", "script".
MENU--> menu donde se coloca esta noticia.
sección--> sección dentro del menu.
En donde:
post --> se visualizara la pagina en forma de "blog".
page --> solo se muestra la ultima noticia.
gallery --> las noticia se muestran en forma de thumbnails (recuadros con foto de portada).
script --> la noticia carga un SCRIPT PHP que adjunto el usuario.
De modo que ANTES de meter la consulta al while() realizo esto:
$q= "select * from NOTICIAS where TITULO LIKE '%piedra%' ORDER BY TITULO ASC;";
$link= conectarmysql();
$query= mysql_query( $q, $link ); # consultamos
# imprime "Resultados Encontrados: 4"
echo 'Resultados Encontrados: '. mysql_num_rows($query);
# consulto el primer dato
$x= mysql_fetch_array($query);
if( !strcmp($x["VISTA"], "post") )
noticias_post($query); # mando la consulta
else if( !strcmp($x["VISTA"], "page") )
noticias_pagina($query); # mando la consulta
else if( !strcmp($x["VISTA"], "gallery") )
noticias_galeria($query); # mando la consulta
else if( !strcmp($x["VISTA"], "script") )
noticias_script($query); # mando la consulta
else echo 'Error';
unset($query);
#
# Y digamos que es la funcion de noticias_post()
#
function noticias_post( $q )
{
if( mysql_num_rows($q) )
{
# ahora a listar
$c=0; # un contador
while( $buf=mysql_fetch_array($q) )
{
echo $buf["TITULO"]. '<br><hr>';
$c++;
}
# imprime "Resultados Listados: 3
echo 'Resultados Listados: '. $c;
mysql_free_result($q);
}
}
Me imagino que el mysq_fetch_array() de la linea 9 hace que pierda el primer elemento del conjunto encontrado, no ?
Saludos !
No se mucho de php pero prueba de hacer la consulta otra vez antes de entrar en noticias_post.
Supongo que al hacer el fetch el cursor se adelanta una posición por eso te retorna 1 menos como tu dices.
Buen dia...
Pues resuelto :D...
El detalle es que hacia una llamada a mysql_fetch_array() para verificar la forma en como se visualizaria el contenido, eso hacia que el puntero se fuera a la posición 2 y a partir de ahí continuaba imprimiendo, por ende el primer dato ya no era visible :S !....
La solución es regresar el punto al principio con:
mysql_data_seek( $query, 0 );
Saludos !