MySQLテーブルに50行あるとします。最初の10個を選択したい(LIMIT 10
)が、別のページで次の10個を選択できるようにしたい。
10行目から選択を開始するにはどうすればよいですか?
更新されたクエリ:
mysql_query("
SELECT * FROM `picdb`
WHERE `username` = '$username'
ORDER BY `picid` DESC
LIMIT '$start','$count'
")
以下を使用して最初のページを取得して作業することをお勧めします。
LIMIT 0, 10
次に2ページ目
LIMIT 10, 10
それから
LIMIT 20, 10
3ページ目など。
LIMIT 10
LIMIT 10 OFFSET 10
SELECT
構文に関するMySQL 5.1ドキュメント から:
PostgreSQLとの互換性のために、MySQLはLIMIT row_count OFFSETオフセット構文もサポートしています。
この質問は古いですが、ハードコーディングされていないコードを追加したいだけです。カオスの答えは、スクリプト(Selectステートメント)をハードコーディングする必要があることを意味します。ファイル名を取得し、現在のページに基づいてデータベースからデータを選択することで、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);
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;
必要な数になるまで続けます。