选择没有LIMIT mysql的n行

时间:2011-08-08 08:17:51

标签: php mysql limit

我有问题。我想从表中只获得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行..

4 个答案:

答案 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行并将其保存在数组中然后对数组索引进行分页