web-dev-qa-db-fra.com

Comment sélectionner des lignes dans MySQL à partir d'un numéro de ligne donné?

Disons que j'ai 50 lignes dans une table MySQL. Je veux sélectionner les dix premiers (LIMIT 10), mais je veux ensuite pouvoir sélectionner les 10 prochains sur une autre page.

Alors, comment puis-je commencer ma sélection après la rangée 10?

Requête mise à jour:

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

Je recommande de travailler en obtenant la première page en utilisant:

LIMIT 0, 10

puis pour la deuxième page

LIMIT 10, 10

puis

LIMIT 20, 10

pour la troisième page, et ainsi de suite.

62
chaos
LIMIT 10

LIMIT 10 OFFSET 10

Depuis les MySQL 5.1 docs sur la syntaxe SELECT :

Pour la compatibilité avec PostgreSQL, MySQL prend également en charge LIMIT row_count Syntaxe de décalage OFFSET.

28
Karl Voigtland

Cette question est ancienne, mais je veux juste ajouter un code qui n'est pas codé en dur, la réponse chaos apportée signifie que vous devrez coder en dur vos scripts (instruction Select). vous pouvez obtenir les mêmes résultats en obtenant le nom du fichier, puis en sélectionnant des données dans la base de données en fonction de la page en cours, sans coder en dur votre instruction select.

$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);
1
TenTen Peter
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;

et continuez jusqu’au nombre que vous voulez.

0
Sachin Prasad