我有问题。我想从表中只获得300行而不接触LIMIT。我需要限制分页。这在MySQL中是否可行?
我当前的查询:
SELECT a.title, a.askprice, a.picture, a.description, a.userid, a.id
FROM mm_ads AS a WHERE a.category = 227 AND a.status = 1
ORDER BY id DESC LIMIT 40,20
修改
简单的解释:我需要从系统中获取最近300个广告,但我需要保持分页,因为我不希望在一个页面中列出300行..
答案 0 :(得分:6)
SELECT *
FROM (
SELECT a.title, a.askprice, a.picture, a.description, a.userid, a.id
FROM mm_ads AS a
WHERE a.category = 227 AND a.status = 1
ORDER BY id DESC
LIMIT 300
) t
LIMIT 40,20
如果目的是加快查询速度,那么您可以创建一个复合索引:
ALTER TABLE `mm_ads`
ADD INDEX `mm_ads_index` (`category` ASC, `status` ASC, `id` DESC);
答案 1 :(得分:2)
在SELECT之后使用SQL_CALC_FOUND_ROWS:
SELECT SQL_CALC_FOUND_ROWS *
编辑:
在php中,运行此行以获取行数:
list($int_rows) = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"));
这将遍历所有行,获取总金额,但不会获取所有行。
EDIT2:
可能会误解您的问题,但这是分页的常见解决方案。
答案 2 :(得分:1)
简单的解决方案是 Fits只计算您需要的结果量,并在您的分页中使用它 然后在查询中使用limit来加载每个页面上的数据
选择a.title,a.askprice,a.picture,a.description,a.userid,a.id FROM mm_ads AS a WHERE a.category = 227 AND a.status = 1 ORDER BY id DESC LIMIT 40,20
不管你的数据库有多大,它只给你20个结果(尽管它搜索完整的数据库)
答案 3 :(得分:0)
您可以做的另一件事是从数据库中获取所有300行并将其保存在数组中然后对数组索引进行分页