Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无限制地选择n行_Php_Mysql_Limit - Fatal编程技术网

Php 无限制地选择n行

Php 无限制地选择n行,php,mysql,limit,Php,Mysql,Limit,我有个问题。我只想从表中获得300行,不受限制。我需要限制分页。这在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行,不受限制。我需要限制分页。这在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行

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);

选择以下选项后,使用SQL\u CALC\u FOUND\u行:

SELECT SQL_CALC_FOUND_ROWS *
编辑:

在php中,运行此行以获取行数:

list($int_rows) = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"));
这将遍历所有行,获取总量,但不会获取所有行

编辑2:


可能误解了您的问题,但这是分页的常见解决方案。

您可以做的另一件事是从数据库中获取所有300行并将其保存在数组中,然后对数组索引进行分页。

简单的解决方案是 只计算所需的结果量,并在分页中使用它 然后在查询中使用limit在每个页面上加载数据

选择a.title、a.askprice、a.picture、a.description、a.userid、a.id 来自mm_广告,其中a.category=227,a.status=1 按id描述的订单限制40,20


不管你的数据库有多大,它只会给你20个结果(尽管它会搜索完整的数据库)

你为什么要收集超过页面容量的记录?如果您需要显示20到40条记录,则不需要收集其他280条记录……我猜您必须提供更多信息,而不是在不说明其用途的情况下暗示一个不可用的解决方案。您可以使用LIMIT进行分页,也可以通过不查询超出限制或限制的页面来限制整个结果集如果限制不适合分页边界,则修剪结果长度。不要编写一个复杂的查询来分隔这两行(或者给出一个非常好的理由)?前300排总是这样?@hakre:是的,我需要前300排……你到底为什么要这样做……?@hoppa,我不知道。这只是对他的问题的一个直接回答:)从语义上说,这是一个正确的答案是的,但它使查询复杂化了很多,这一点都不必要。@Karolis感谢您的快速回答和直接回答,但这个查询太慢了。。我有50000多行,所以我需要关注速度性能。@Puzo所以你想将结果集限制为300行,因为你想加快查询速度?这就是目的?感谢分享您的解决方案。。但我不认为这就是我要找的。。