2011-01-06 12 views
9

Aquí está mi problema. Necesito más de una fila de la base de datos, y necesito la primera fila para cierta tarea y luego revisar toda la lista nuevamente para crear un conjunto de registros.Obteniendo la primera fila de la cadena de recursos mysql?

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

$firstrow = //extract first row from database 
//add display some field from it 


while($row = mysql_fetch_assoc($result)) { 
    //display all of them 
} 

Ahora, ¿cómo extraer solo la primera fila?

+0

¿Cuál es la primera fila de una tabla? – Toto

+0

@ M42: Él quiere la primera fila en el conjunto de registros, claramente. –

Respuesta

13

El uso de mysql_fetch_assoc() no solo recupera una fila, también mueve el puntero interno del conjunto de resultados a la siguiente fila. Para restablecer el recurso de resultado a la primera fila, debe usar mysql_data_seek().

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

$firstrow = mysql_fetch_assoc($result); 

// reset the result resource 
mysql_data_seek($result, 0); 


while($row = mysql_fetch_assoc($result)) { 
    //display all of them 
} 
+0

Qué ineficiente. ¿Por qué demonios querrías hacer una operación de búsqueda y recuperar la primera fila una vez que ya la hayas extraído? –

+0

Necesita preguntarle a @mrNepal por qué quiere hacerlo. Puede haber una muy buena razón. Por otro lado, si no hay un motivo en particular, estoy de acuerdo en que no es el enfoque óptimo. Simplemente respondí la pregunta tal como fue planteada. –

+0

No puedo entender por qué el voto abajo. Esta es la respuesta perfecta a mi problema. Yo razono que necesito la primera fila y luego vuelvo a ejecutar con los resultados, es porque estoy usando el mismo conjunto de resultados para 1) Mostrar el contenido completo y 2) Mostrar otro contenido relacionado. – mrN

0

Cada vez que llame al mysql_fetch_assoc($result), obtendrá una fila. Así, en lugar de hacerlo en varias ocasiones en un bucle, sólo lo hacen una vez:

$result = mysql_query("..."); 
if ($row = mysql_fetch_assoc($result)) { 
    $firstRow = $row; 

    while ($row = mysql_fetch_assoc($result)) { 
     // all the rest 
    } 
} 

responsabilidad: esto podría ser un código más bonito, pero se entiende la idea!

+0

no, no funcionó ... mientras que también solo obtiene una fila – mrN

+0

De hecho, Tomalak olvidó restablecer el puntero interno. – Andrew

+0

@Andrew: ¿Eh? Qué puntero interno. No veo por qué este fragmento no debería funcionar. –

1

Si desea obtener todas las filas de la primera vez vuelva a intentar la siguiente

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

if ($row = mysql_fetch_assoc ($result){ 
    $firstRow = $row; 
    mysql_data_seek($result, 0); 

    while($row = mysql_fetch_assoc($result)) { 
     //display all of them 
    } 
} 

Más sobre mysql_data_seek aquí: PHP: mysql_data_seek - Manual

+0

+1, gracias por la ayuda – mrN

+0

Mismo comentario que a David. –

+0

Mismo comentario que la respuesta anterior. – mrN

Cuestiones relacionadas