我正在为我的php应用程序编写一些新闻部分,我想为用户编写一个函数,以便能够获取最新的10条新闻,以及稍后当用户要求查看更多新闻时该函数从10返回最新消息到20等等。 考虑我的桌子是这样的
+++++News_table++++++++
+news_ID
+news_title
+news_desc
+date_modified
++++++++++++++++++++++
我搜索过MySQL查询,但我只找到了这个
SELECT new_title , news_desc FROM News_table order by date_modified DESC limit 10 ;
但是这个查询只返回前10个项目,如果我想以相同的方式获得下一个10个新闻(新闻11到20),它就已经过时了。 我应该怎么写我的查询?
答案 0 :(得分:2)
请参阅offset
:
SELECT new_title , news_desc FROM News_table order by date_modified DESC limit 0, 10; // 1 - 10
SELECT new_title , news_desc FROM News_table order by date_modified DESC limit 10, 10; // 11 - 20
如果我希望PHP $_GET['page']
变量通过页面,值为1,2等,则查询将为:
SELECT new_title , news_desc FROM News_table order by date_modified DESC limit ((int)$_GET['page'] - 1) * 10, 10;
OR
$page = isset($_GET['page']) ? ($_GET['page'] - 1) * 10 : 0;
SELECT new_title , news_desc FROM News_table order by date_modified DESC limit $page, 10;
答案 1 :(得分:1)
Limit也接受两个参数:
SELECT new_title , news_desc FROM News_table order by date_modified DESC limit 10, 10;
//starts from 11th and return 10 following rows
也可以在DESC
中使用DEC
,而不是order by
。
答案 2 :(得分:0)
来自fine manual:
LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT需要一个或两个数字参数,它们都必须是非负整数常量(使用预准备语句时除外)。
使用两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为0(不是1):
SELECT * FROM tbl LIMIT 5,10; #检索行6-15
答案 3 :(得分:0)
限制10,10表示从10到下10记录得到结果。阅读手册limit
SELECT new_title , news_desc FROM News_table order by date_modified DESC limit 10, 10
答案 4 :(得分:0)
每次用户选择第2页
SELECT new_title , news_desc FROM News_table order by date_modified DEC limit 0, 10;
然后
SELECT new_title , news_desc FROM News_table order by date_modified DEC limit 11, 20;
等等