[MySQL] Consulta con LIKE omite el primer elemento al momento de listar (solved)

Iniciado por Diabliyo, 11 Octubre 2013, 17:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

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:

Código (php) [Seleccionar]
<?php
$q
"select * from NOTICIAS where TITULO LIKE '%piedra%' ORDER BY TITULO ASC;";
$linkconectarmysql();
$querymysql_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 !

Shell Root

Sera porque el contador empieza desde 0  :silbar:, la verdad no entendi mucho
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

1mpuls0

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);
abc

Diabliyo

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 !

Shell Root

#4
Lo tengo exactamente como tú lo tienes, mira: -PASAME UN SCRIPT DE LA TABLA-

Código:
Código (php) [Seleccionar]
     $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:
Código (php) [Seleccionar]
Resultados Encontrados: 4
piedra1
piedra2
piedra3
piedra4
Resultados Listados: 4


PD: jaja el comentario de ahora, es que estaba beodo :p
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Diabliyo

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:

Código (php) [Seleccionar]
$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 !

xustyx

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.

Diabliyo

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:

Código (php) [Seleccionar]
mysql_data_seek( $query, 0 );

Saludos !