Foros del Web » Programando para Internet » PHP »

Error en consulta mysql

Estas en el tema de Error en consulta mysql en el foro de PHP en Foros del Web. Hola a todos tengo dos consultas a una base de datos. Los resultados de estas consultas se listan pero antes sale el número de registros ...
  #1 (permalink)  
Antiguo 08/10/2004, 08:50
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 13 años, 10 meses
Puntos: 0
Error en consulta mysql

Hola a todos

tengo dos consultas a una base de datos. Los resultados de estas consultas se listan pero antes sale el número de registros contado. El problema es que se cuentan bien, pero el listado comienza en el registro 2, es decir, falta siempre el primero.

El codigo es:

mysql_select_db($database_Astur, $Astur);
$nuevos = "SELECT Rev, Num, Especie, Autor, Nombrecomún, Fotowww1, Video FROM Astur WHERE Rev LIKE 'N' ORDER BY Num ASC";
$RecordsetN = mysql_query($nuevos, $Astur) or die(mysql_error());
$row_RecordsetN = mysql_fetch_assoc($RecordsetN);
$totalRows_RecordsetN = mysql_num_rows($RecordsetN);
$_pagi_sqlContaN = eregi_replace("select (.*) from", "SELECT COUNT(Especie) FROM", $nuevos);
$_pagi_result2N = mysql_query($_pagi_sqlContaN) or die ("Error en la consulta de conteo de registros. Mysql dijo: <b>".mysql_error()."</b>");
$_pagi_totalRegN = mysql_result($_pagi_result2N,0,0);//total de registros

$resultfoto = "SELECT Rev, Num, Especie, Autor, Nombrecomún, Fotowww1, Video FROM Astur WHERE Rev LIKE 'F' ORDER BY Num ASC";
$RecordsetF = mysql_query($resultfoto, $Astur) or die(mysql_error());
$row_RecordsetF = mysql_fetch_assoc($RecordsetF);
$totalRows_RecordsetF = mysql_num_rows($RecordsetF);
$_pagi_sqlContaF = eregi_replace("select (.*) from", "SELECT COUNT(Especie) FROM", $resultfoto);
$_pagi_result2F = mysql_query($_pagi_sqlContaF) or die ("Error en la consulta de conteo de registros. Mysql dijo: <b>".mysql_error()."</b>");
$_pagi_totalRegF = mysql_result($_pagi_result2F,0,0);//total de registros

y luego viene el listado:

<b><br><? echo $_pagi_totalRegN; ?></b> nuevas especies<br>
<?

while($row = mysql_fetch_array($RecordsetN)){
echo "<a href=\"../Consultas/Ficha.php?Especie=".$row['Especie']."\" onclick=\"NewWindow(this.href,'Especie','800','500 ','yes','center');return false\" onfocus=\"this.blur()\">";
?>
<span class="listasesp">
<? echo $row['Especie']."</a> "; ?> </span><span class="listaaut"> <?
echo $row['Autor'];?></span><?
if ($row['Nombrecomún']!="")?><span class="menutablaplanprin"><? { echo "; <b>".$row['Nombrecomún']."</b>";} ?> </span> <?
if ($row['Fotowww1']!="") { echo "</span>, <b>F</b>";}
if ($row['Video']!="") { echo "</span>, <b>V</b>";}
echo "<br>";
}
?>
</td>
</tr>
<tr>
<td valign="top"><br>
<? if ($row_RecordsetF['Especie']!="") {?>
<b><? echo $_pagi_totalRegF; ?></b> nuevas fotos<br>
<?
while($row = mysql_fetch_array($RecordsetF)){
echo "<a href=\"../Consultas/Ficha.php?Especie=".$row['Especie']."\" onclick=\"NewWindow(this.href,'Especie','800','500 ','yes','center');return false\" onfocus=\"this.blur()\">";
?>
<span class="listasesp">
<? echo $row['Especie']."</a> "; ?> </span><span class="listaaut"> <?
echo $row['Autor'];?></span><?
if ($row['Nombrecomún']!="")?><span class="menutablaplanprin"><? { echo "; <b>".$row['Nombrecomún']."</b>";} ?> </span> <?
if ($row['Fotowww1']!="") { echo "</span>, <b>F</b>";}
if ($row['Video']!="") { echo "</span>, <b>V</b>";}
echo "<br>";
}}
?>

¿ve alguien el error?
  #2 (permalink)  
Antiguo 08/10/2004, 09:05
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Mira tu codigo:
Código PHP:
$nuevos "SELECT Rev, Num, Especie, Autor, Nombrecomún, Fotowww1, Video FROM Astur WHERE Rev LIKE 'N' ORDER BY Num ASC";
$RecordsetN mysql_query($nuevos$Astur) or die(mysql_error());
[
B]$row_RecordsetN mysql_fetch_assoc($RecordsetN); // <--- ¿Para que?[/B]
$totalRows_RecordsetN mysql_num_rows($RecordsetN);
.
.
.
while(
$row mysql_fetch_array($RecordsetN)){
echo 
"<a href=\"../Consultas/Ficha.php?Especie=".$row['Especie']."\" onclick=\"NewWindow(this.href,'Especie','800','500','yes','center');return false\" onfocus=\"this.blur()\">"
Como ves, despues realizar la consulta lees el primer registro con mysql_fetch_assoc(). Luego llegas al while() y lees el siguiente registro con mysql_fetch_array().

Tu codigo esta un poco lioso, pero no veo que uses $row_RecordsetN. Si es asi, quitas esa linea.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 08/10/2004, 09:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cuando haces un:

$row_RecordsetN = mysql_fetch_assoc($RecordsetN);

o en general función de "___fetch___" .. El puntero interno de la consulta se mueve una posición hacia adelante quendado así para la próxima ejecución de un "___fetch___" .. EN tu caso haces uno así para obtener el total de registros que cuentas .. y luego otro más para presentar esos registros (obtenerlos) .. Así que es por eso que ves a partir del 2° en tu último "fetch" que haces.

Tienes várias soluciones para evitar ese problema.

Uno sería usar COUNT() y mysql_result() para obtener el total de registros de tu primera consulta (como haces con otra) ..

Otra solución es mover el puntero de la consulta al principio tras cada "fetch" de los que haces con la función: mysql_data_seek()

Pero, .. deberías revisar el código haces dos cosas al parecer que sólo deberías hacer una vez: contar los regitros por ejemplo ... o usas el COUNT() o el mysql_num_rows() pero no los dos y sobre todo usar mysql_result() en lugar de mysql_fetch_xxxx() para obtener ese valor si es que realmente no lo vas a emplear a continuación.

Un saludo,
  #4 (permalink)  
Antiguo 08/10/2004, 09:23
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 13 años, 10 meses
Puntos: 0
Problema solucionado quitando esa línea que dice josemi. Gracias a los dos por vuestros consejos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.