2009-08-10 21 views
25

Digamos que tengo 50 filas en una tabla MySQL. Quiero seleccionar los primeros diez (LIMIT 10), pero luego quiero poder seleccionar los 10 siguientes en una página diferente.¿Cómo puedo seleccionar filas en MySQL comenzando en un número de fila dado?

Entonces, ¿cómo empiezo mi selección, después de la fila 10?

consulta Actualizado:

mysql_query(" 
    SELECT * FROM `picdb` 
    WHERE `username` = '$username' 
    ORDER BY `picid` DESC 
    LIMIT '$start','$count' 
") 
+1

Trate mysql_query ("SELECT * FROM' 'picdb' DONDE username' = ORDER BY' picid' DESC LIMIT $ inicio, $ count '$ nombre de usuario'") – Rufinus

+1

Re edición, se debe obtener la retroalimentación de error establecido hasta el punto de que le dirá qué le pasa a su SQL. Descubrirá que tiene un error de sintaxis porque su cláusula 'LIMIT' está antes de su cláusula' ORDER BY'. – chaos

+0

gracias chicos, funciona bien ahora. – mrpatg

Respuesta

52

recomiendo trabajar mediante la obtención de la primera página usando:

LIMIT 0, 10 

a continuación para la segunda página

LIMIT 10, 10 

continuación

LIMIT 20, 10 

para la tercera página, y así sucesivamente.

+0

disculpa, pero me preguntaba cómo funciona esto? funciona para mí, pero no puedo obtenerlo, ¿significa buscar desde 21 con un máximo de 10 filas? – engma

+0

He estado haciendo algunas búsquedas durante un tiempo, y el número de inicio depende del motor, cuando probé con innodb comenzó con 0, no 1, por lo que debe verificar las preferencias de su motor. – engma

+1

@ Developer106: en realidad, no puedo replicar el índice comenzando con 1 en cualquier circunstancia, por lo que no sé cómo ocurrió la versión anterior de esta respuesta. – chaos

25
LIMIT 10 

LIMIT 10 OFFSET 10 

Desde el MySQL 5.1 docs on SELECT syntax:

Para compatibilidad con PostgreSQL, MySQL también es compatible con la sintaxis LIMIT row_count offset.

+2

¿Es eso válido? Nunca he visto eso. – mpen

+7

No estoy seguro de qué tan extendido es OFFSET; pero es un poco más claro ya que no tiene que recordar qué número es el límite y cuál es el desplazamiento. –

+3

+1 porque no sabía que pondrían eso. – chaos

1

Esta pregunta es antigua, pero solo quiero agregar un código que no está codificado, la respuesta caos dio significa que tendrá que codificar sus secuencias de comandos (Seleccionar instrucción). puede obtener los mismos resultados obteniendo el nombre del archivo y luego seleccionando los datos de la base de datos en función de la página actual, sin tener que codificar la declaración seleccionada. primero obtener la página actual

$page = basename($_SERVER['SCRIPT_FILENAME']); 
$page_counter = rtrim($page, ".php"); 
//setting your limit 
$start = 0; 
$limit = 10; 
//if current page is not index.php then $start = ($limit * page_counter); 
// e.g if current page is 1.php then $start = ($limit * 1) = 10 
//if current page is 2.php then $start = ($limit * 2) = 20 
if ($page !== 'index.php') { 

$start = ($limit * $page_counter); 
} 
//getting row count 
$ROW_COUNT = $db->query('SELECT * from tableName')->rowCount(); 

//getting number of rows left in the table 
$rows_left = ("SELECT * FROM tableName limit ?,?"); 
$rows_left = $db->prepare($rows_left); 
$rows_left->execute(array($start,$ROW_COUNT)); 
$rows = $rows_left->fetchAll(PDO::FETCH_ASSOC); 

$number_rows = 0; 
foreach ($rows as $r) { 
$number_rows = $number_rows + 1; 
} 
//if number of rows left in the table is less than 10 then $limit = the number of rows left 
if ($number_rows < 10) { 
$limit = $number_rows; 
} 

//getting all rows 
      $getRows = "SELECT * FROM tableName limit ?,?"; 
      $getRows = $db->prepare($getRows); 
      $getRows->execute(array($start , $limit)); 
      $getRows = $getRows->fetchAll(PDO::FETCH_ASSOC); 
0
select * from 'table_name' 
ORDER BY 'column_id 'DESC 
LIMIT 0,10; 

select * from 'table_name' 
ORDER BY 'column_id' DESC 
LIMIT 10,10; 

select * from 'table_name' 
ORDER BY 'column_id' DESC 
LIMIT 20,10; 

y continuar hasta que los números que desea.

+0

¡Bienvenido a stackoverflow! Esta es una pregunta muy antigua y con mucho tráfico. ¿Su respuesta agrega algo que una de las otras respuestas ya establecidas no tiene?En términos generales, es mejor si puede editar las respuestas existentes aceptadas para reflejar cualquier cambio necesario en lugar de una nueva respuesta completa, ya que la mayoría de los usuarios no se desplazarán hasta la parte inferior (donde aparecerá su respuesta). – zack6849

Cuestiones relacionadas