【问题标题】:MYSQL query load data by section as in phpmyadminMYSQL 查询按部分加载数据,如 phpmyadmin
【发布时间】:2014-04-20 11:15:05
【问题描述】:

当我在 phpmyadmin 上运行此查询时

SELECT * 
FROM  `product_stock` 
WHERE  `product_warehouse_id` =5
LIMIT 100000

它按 50 到 50 节加载数据,直到它停止。但是当我在正常的 php 页面中执行此操作时,需要一段时间才能加载,有时我会收到服务器错误。我怎样才能接近类似于 phpmyadmin 加载结果的方式?

【问题讨论】:

  • 为第一页添加分页限制 0 50,然后为第二页添加 51 100,依此类推

标签: php mysql while-loop limit


【解决方案1】:

http://www.tutorialspoint.com/php/mysql_paging_php.htm 这是如何在 mysql 长查询上添加分页的教程。

【讨论】:

  • 我不想分页我希望所有数据都显示在一个页面中,但将其加载 50,然后再添加 50,然后再添加 50,直到到达最后一个数字。
【解决方案2】:

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

LIMIT 0, 50

然后您将传递起始行和页面大小。您示例中的 10000 实际上只是以下形式的缩写:

LIMIT 0, 10000

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

【讨论】:

  • 那么如果我用查询 LIMIT 0, 50 then LIMIT 50, 100 and son on it will add all tables in the same page?
  • @bmacuer - 请注意参数是起始行和 页面大小,因此如果您的第二个是 50、100,那么您将在第二次调用时检索 100 行,而不是 50。
【解决方案3】:

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

SELECT * FROM tablename WHERE 1 AND fieldkey = 'value' 

如果数据量很大,会导致Mysql出现性能问题。

用途:

SELECT field1, field2, field3 FROM tablename WHERE 1 AND fieldkey = 'value'

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

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

您可以对查询结果进行分页,如下所示:

php- Paginate data from array

【讨论】:

  • 我理解您对字段的看法,这是一个很好的观点,但正如我所说,我需要在同一页面中加载所有数据。下面我回答了我需要的答案。谢谢
  • 你需要使用ajax。相同的概念,但是您将获得第一页,当用户点击更多时,您将向服务器发送 ajax 请求以获取接下来的 50 条记录,并且您将越来越多地附加在同一页面上。当html表到达@底部时,您可以使用ajax检查jQuery ajax追加更多记录
  • @m-farhan 请参考我自己在底部的答案,您将不需要 ajax。
  • @JosephCollins 请检查我自己发布的答案/解决方案。不需要ajax。 :)
【解决方案4】:

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

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;

} 

【讨论】:

  • 非常适合您。我怎么不理解它每次需要获取数据时都会与 mysql 建立新连接的逻辑。不是很好的方法,但祝你好运。
  • 您仍然不了解 LIMIT 的工作原理,它会返回 50、100、150 ... 900、950、1000 行。此外,在您的数据超过该序列的总和之前,您的算法是好的,因为它本质上是自我限制的(10500 行)。
  • 你是对的@JohnCavan 你对我如何修复代码有任何建议吗?
  • 更改您的循环以查看数据库响应,了解限制的工作原理,如我所描述和链接的,并阅读在 PHP 中使用 prepared statements
猜你喜欢
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2016-05-19
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多