2009-08-10 18 views
25

Dire che ho 50 righe in una tabella MySQL. Voglio selezionare i primi dieci (LIMIT 10), ma poi voglio essere in grado di selezionare il prossimo 10 su una pagina diversa.Come posso selezionare le righe in MySQL iniziando da un dato numero di riga?

Quindi come si avvia la selezione, dopo la riga 10?

interrogazione Aggiornato:

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

Prova mysql_query ("SELECT * FROM' picdb' dove 'username' = '$ username' ORDER BY' picid' DESC LIMIT $ start, $ count") – Rufinus

+1

Re di modifica, si dovrebbe ottenere il tuo feedback errore impostare al punto che ti dirà cosa c'è di sbagliato nel tuo SQL. Scoprirai di avere un errore di sintassi perché la tua clausola 'LIMIT' è precedente alla tua clausola' ORDER BY'. – chaos

+0

grazie ragazzi, ora funziona bene. – mrpatg

risposta

52

vi consiglio a lavorare ottenendo la prima pagina con:

LIMIT 0, 10 

quindi per la seconda pagina

LIMIT 10, 10 

poi

LIMIT 20, 10 

per la terza pagina e così via.

+0

mi dispiace chiedere ma ho continuato a chiedermi come funziona? funziona per me ma non riesco a ottenerlo, vuol dire andare a guardare da 21 con un massimo di 10 righe? – engma

+0

Ho fatto alcune ricerche per un po 'ora, e il numero di partenza dipende dal motore, quando ho provato con innodb è iniziato con 0 non 1, quindi è necessario controllare le preferenze del motore. – engma

+1

@ Developer106: In realtà, non posso replicare l'indice iniziando con 1 in qualsiasi circostanza, quindi non so come sia avvenuta la versione precedente di questa risposta. – chaos

25
LIMIT 10 

LIMIT 10 OFFSET 10 

Dal MySQL 5.1 docs on SELECT syntax:

Per la compatibilità con PostgreSQL, MySQL supporta anche il limite row_count sintassi di offset OFFSET.

+2

È valido? Non l'ho mai visto. – mpen

+7

Non sono sicuro di quanto sia diffuso OFFSET; ma è un po 'più chiaro dal momento che non devi ricordare quale numero è il limite e quale è l'offset. –

+3

+1 perché non sapevo che l'avrebbero inserito. – chaos

1

Questa domanda è vecchia ma io voglio solo aggiungere un codice che non è codificato, il caos ha dato risposta significa che dovrete hardcode vostri script (Select). è possibile ottenere gli stessi risultati ottenendo il nome del file e quindi selezionare i dati dal database in base alla pagina corrente, senza codifica dell'istruzione select. prima ottenere la pagina corrente

$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; 

e proseguire fino i numeri desiderati.

+0

Benvenuti in StackOverflow! Questa è una domanda piuttosto vecchia e ad alto traffico, la tua risposta aggiunge qualcosa che una delle altre risposte già stabilite non è?In generale, è meglio se puoi modificare le risposte esistenti accettate per riflettere le eventuali modifiche necessarie piuttosto che una risposta completamente nuova, poiché la maggior parte degli utenti non scorrerà fino in fondo (dove verrà visualizzata la risposta). – zack6849

Problemi correlati