我的数据库表中有超过500行,具有特定日期。
查询具有特定日期的行。
select * from msgtable where cdate='18/07/2012'
这会返回500行。
如何逐步查询这500行10行。 查询前10行并在浏览器中显示,然后查询接下来的10行并在浏览器中显示?
答案 0 :(得分:53)
只需使用LIMIT
子句。
SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10
从下次通话中你可以这样做:
SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10 OFFSET 10
有关LIMIT
and OFFSET
的OFFSET
和LIMIT
的更多信息。
答案 1 :(得分:11)
LIMIT limit OFFSET offset
将有效。
但是你需要一个稳定的ORDER BY
子句,或者对于下一个调用可能会以不同的方式排序值(例如,在对表进行任何写入之后)。
SELECT *
FROM msgtable
WHERE cdate = '2012-07-18'
ORDER BY msgtable_id -- or whatever is stable
LIMIT 10
OFFSET 50; -- to skip to page 6
使用符合标准的日期样式(ISO 8601 in my example),无论您的语言环境设置如何,都可以使用。
如果在相关列中插入或删除或更改了相关行,则分页仍将移位。它必须。
为避免这种转变或使用大表更好的性能,请使用更智能的分页策略:
答案 2 :(得分:2)
SET @rownum = 0;
SELECT sub.*, sub.rank as Rank
FROM
(
SELECT *, (@rownum := @rownum + 1) as rank
FROM msgtable
WHERE cdate = '18/07/2012'
) sub
WHERE rank BETWEEN ((@PageNum - 1) * @PageSize + 1)
AND (@PageNum * @PageSize)
每次传递参数@PageNum
和@PageSize
以获取所需的特定页面。例如,前10行是@PageNum = 1 and @PageSize = 10
答案 3 :(得分:1)
前10行...
SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT 0,10
接下来的10行
SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT 10,10
答案 4 :(得分:1)
.disabled{
pointer-events: none;
opacity: 0.5;
}
答案 5 :(得分:0)
您可以使用postgresql Cursors
BEGIN;
DECLARE C CURSOR FOR where * FROM msgtable where cdate='18/07/2012';
然后使用
FETCH 10 FROM C;
获取10行。
芬兰语
COMMIT;
关闭光标。
但如果您需要在不同的流程中进行查询,@ Praveen Kumar建议的LIMIT和OFFSET更好
答案 6 :(得分:0)
确定。所以我认为你只需要实现分页。
$perPage = 10;
$pageNo = $_GET['page'];
现在在数据库中找到总行数。
$totalRows = Get By applying sql query;
$pages = ceil($totalRows/$perPage);
$offset = ($pageNo - 1) * $perPage + 1
$sql = "SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT ".$offset." ,".$perPage