Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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
MYSQL查询按节加载数据,如phpmyadmin中所示_Php_Mysql_While Loop_Limit - Fatal编程技术网

MYSQL查询按节加载数据,如phpmyadmin中所示

MYSQL查询按节加载数据,如phpmyadmin中所示,php,mysql,while-loop,limit,Php,Mysql,While Loop,Limit,当我在phpmyadmin上运行此查询时 SELECT * FROM `product_stock` WHERE `product_warehouse_id` =5 LIMIT 100000 它按50乘50段加载数据,直到停止。但是,当我在一个普通的php页面中进行加载时,需要一段时间,有时会出现服务器错误。我怎样才能找到类似于phpmyadmin加载结果的方法 本教程介绍如何在mysql长查询上添加分页 MySQLLIMIT包含几个可能的参数。单个值指定将所有这些结果返回给调用方。

当我在phpmyadmin上运行此查询时

SELECT * 
FROM  `product_stock` 
WHERE  `product_warehouse_id` =5
LIMIT 100000
它按50乘50段加载数据,直到停止。但是,当我在一个普通的php页面中进行加载时,需要一段时间,有时会出现服务器错误。我怎样才能找到类似于phpmyadmin加载结果的方法


本教程介绍如何在mysql长查询上添加分页

MySQL
LIMIT
包含几个可能的参数。单个值指定将所有这些结果返回给调用方。如果传递两个值:

LIMIT 0, 50
然后传递起始行和页面大小。您示例中的10000实际上只是以下内容的一个简短形式:

LIMIT 0, 10000

有关更多详细信息,请参阅上的MySQL帮助文档。

我建议,如果您不打算对所有列使用所有数据,请不要使用:

SELECT * FROM tablename WHERE 1 AND fieldkey = 'value' 
如果数据量很大,会导致Mysql出现性能问题

使用:

在SELECT语句中,对要显示的列使用逗号分隔的名称,这将帮助服务器更快地响应而不会出现问题,并且可以轻松地对结果进行分页

还要验证“fieldkey”上的数据是否已编制索引,这有助于查询更快地工作

您可以使用以下内容对查询结果进行分页:


这就是我想要的,在它工作的最后,我必须用逻辑来完成它,下面是示例代码:

while ($limit <= 1000){

    $q1 = "SELECT * 
            FROM  product_stock
            WHERE  product_warehouse_id = 5 
            LIMIT $start, $limit";

    $r1 = mysql_query($q1) or die(mysql_error());

    while($stock_info = mysql_fetch_assoc($r1)){

        echo $stock_info[product_stock_id]."<br />";

    }

    $start = $limit + 1;
    $limit += 50;

} 

while($limit添加分页,比如第一页的limit 0 50,第二页的limit 51 100等等。如果我使用查询limit 0,50,那么limit 50,100和son将在同一页中添加所有表?@bmacuer-注意参数是起始行和页面大小,因此如果第二个参数是50,100,那么您将在第二次调用中检索100行,而不是50.我不想分页我希望所有数据都显示在一页中,但先加载50,然后再添加50,然后再添加50,直到达到最后一个数字。我理解你对字段的看法,这是一个好观点,但正如我所说,我需要在同一页中加载所有数据。下面我回答了我需要的答案。谢谢你需要使用ajax。同样的概念,但您将获得第一页,当用户点击更多时,您将向服务器发送下一个50条记录的ajax请求,并且您将在同一页上追加越来越多的记录。当html表到达@bottom时,您可以使用ajax check jQuery追加更多记录ajax@m-farhan请参考底部我自己的答案不需要ajax。@JosephCollins请检查我自己的答案/我发布的解决方案。不需要ajax。:)很好,它对你有用。但我没有理解逻辑,每次你需要获取数据时,它都会与mysql建立一个新连接。这不是一个很好的方法,但祝你好运。你仍然不了解限制是如何工作的,这会返回50、100、150…900、950、1000行。此外,在你的数据超过总和之前,你的算法是好的因为它本质上是自我限制的(10500行)。你是对的@JohnCavan你对我如何修复代码有什么建议吗。改变你的循环来查看DB响应,理解我所描述和链接的限制是如何工作的,并阅读PHP中的使用。
while ($limit <= 1000){

    $q1 = "SELECT * 
            FROM  product_stock
            WHERE  product_warehouse_id = 5 
            LIMIT $start, $limit";

    $r1 = mysql_query($q1) or die(mysql_error());

    while($stock_info = mysql_fetch_assoc($r1)){

        echo $stock_info[product_stock_id]."<br />";

    }

    $start = $limit + 1;
    $limit += 50;

}