我一直在Google上搜索,似乎无法找到正确的答案(我可能没有找到正确的条款),我试图获得25条结果返回每次从数据库,但例如我想做的是:
查询1应返回结果1 - 24
查询2应返回结果25 - 49
等等。
最好的方法是什么?
由于
答案 0 :(得分:0)
SELECT * FROM `table_name` LIMIT 0,25 // This will give you 1-24 records
SELECT * FROM `table_name` LIMIT 25,25 // This will give you 25-49 records
答案 1 :(得分:0)
来自the manual:
LIMIT子句可用于约束返回的行数 通过SELECT语句。 LIMIT需要一个或两个数字参数, 必须都是非负整数常量(使用时除外) 准备好的陈述)。
使用两个参数,第一个参数指定的偏移量 第一行返回,第二行指定最大数量 要返回的行。初始行的偏移量为0(不是1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
所以在你的情况下:
SELECT * FROM `table_name` LIMIT 0,25
SELECT * FROM `table_name` LIMIT 25,25
答案 2 :(得分:0)
(SELECT *
FROM mytable
LIMIT 0,24)
UNION
(SELECT *
FROM
mytable
LIMIT 24,25)
ORDER BY someSortOfId;
请注意,至少应有一列具有唯一值(例如ID),否则结果集将重叠。
答案 3 :(得分:0)
它们是单独的查询,尽管它们在完全相同的条件下从完全相同的表返回完全相同的字段。它们之间的区别是LIMIT块:
LIMIT startRow, rowsCount
--the first row is the 0th, not 1st.
如果您的查询如下:
select * from mytable where field1 = "value1"
您必须执行两个单独的查询(或根据需要执行多少查询):
select * from mytable where field1 = "value1" LIMIT 0, 25
-- will return the first 25 rows
select * from mytable where field1 = "value1" LIMIT 25, 25
-- will return 25 rows starting from the row 25
通用公式:如果要获取特定页面N(从1开始),其中每个页面都有M个元素,则必须附加到查询中:
$yourquery = "select * from mytable where myfield = 'myvalue'";
$yourquery .= sprintf(" LIMIT %d, %d", ($page-1)*$itemsPerPage, $itemsPerPage);
$result = mysql_query($yourquery, $yourconnection);
<强>免责声明强>:
sprintf
作为参数,除非您知道自己在做什么,因为您可能会暴露SQL注入漏洞。 编辑您可以使用任何想要进行限制的元素。通常,页面具有恒定的大小,但由于您需要不规则的大小(页面1 24元素,页面2 25个元素,您应该)使用以下LIMIT
s:
LIMIT 0, 24
--gets the first 24 (say 1st to 24th) elements
LIMIT 24, 25
--gets the following 25 items (say 25th to 49th)