iT邦幫忙

0

sql 分頁問題 limit + order by

想請問
SELECT * FROM tableName
WHERE id >= (SELECT id FROM tableName ORDER BY id LIMIT 0 , 1)
LIMIT 10;
再加入ORDER BY id DESC 時,第一頁只會顯示一筆資料(最後一筆)
請問該如何改寫成第一頁第一筆資料遞減下去呢?

0

稍微重新排版一下 T-SQL,這樣在搜尋資料時,在 WHERE 內每個 cell 抓到的會是第一筆資料的 id,自然就只有一筆資料。

SELECT
	*
FROM
	`tableName`
WHERE
	`id` >= (
	SELECT
		`id` 
	FROM
		`tableName`
	ORDER BY
		`id`
		LIMIT 0, 1 
	)
LIMIT 10

如果你的目的是想要根據 id 做排序的話,那不需要 WHERE,直接 ORDER BY 就行了。

SELECT
	*
FROM
    `tableName`
ORDER BY
    `id`

如果你想要做資料限制的話,那也只需要直接做 LIMIT 就可以了。

SELECT
	*
FROM
	`tableName`
LIMIT 10

如果你兩個都要做的話,那就兩個都放一起。

SELECT
	*
FROM
	`tableName`
ORDER BY
    `id`
LIMIT 10

如果你想要資料是以 id 遞減的方式排序的話,則是在 ORDER BY 當中加入 DESC 即可。

SELECT
	*
FROM
	`tableName`
ORDER BY
    `id` DESC
LIMIT 10
0
浩瀚星空
iT邦超人 1 級 ‧ 2020-09-18 11:41:51

改成這樣看是不是你要的。我用php處理

<?php
    $page = $_GET['page']??1;//傳進來的頁碼。自已改成自已的傳送值
    $rowNum = 10;//一頁顯示幾筆
    $start = ($page-1)*$rowNum;//計算起始值
    
    //對應的sql命令,改成你class的應用就好。
    $sql = "SELECT * FROM tableName LIMIT {$start},{$rowNum}";
    .....
    .....
?>

搞成那樣有點太複雜。mysql的limit是可以設定起始值的。

我要發表回答

立即登入回答