Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Diabliyo en 11 Octubre 2013, 17:23 PM

Título: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar (solved)
Publicado por: Diabliyo en 11 Octubre 2013, 17:23 PM
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 !
Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Shell Root en 11 Octubre 2013, 21:56 PM
Sera porque el contador empieza desde 0  :silbar:, la verdad no entendi mucho
Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: 1mpuls0 en 11 Octubre 2013, 22:13 PM
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);
Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Diabliyo en 12 Octubre 2013, 07:22 AM
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 !
Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Shell Root en 12 Octubre 2013, 08:29 AM
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
Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Diabliyo en 13 Octubre 2013, 17:59 PM
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 !
Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: xustyx en 13 Octubre 2013, 18:41 PM
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.
Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Diabliyo en 14 Octubre 2013, 16:42 PM
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 !