【问题标题】:Limit results of all MySQL queries限制所有 MySQL 查询的结果
【发布时间】:2015-03-25 21:25:30
【问题描述】:

我写了一个 PHP/MySQLi 前端,用户可以在其中输入 SQL 查询,然后服务器将结果返回到一个表中(或在 INSERTs 和 UPDATEs 上打印 OK)

由于在包含大约 160 万部电影、190 万演员和 320 万关键字的 IMDb 提取中打印结果可能需要很长时间(例如 SELECT * FROM movies),因此我将输出限制为 50通过在 50 次迭代后取消打印 for 循环来记录行。

但是,查询本身也需要相当长的时间,所以我希望可以设置全局最大行返回值,不管是否使用LIMIT 关键字。我只是打算将服务器用于我自己的练习,但是由于我班上的一些人正在努力使用老师提供的前端(Windows EXE,但有一半的班级使用 Mac/Linux),我决定让它可以访问他们也是。但我想防止我的 Debian VM 崩溃,因为 - 好吧,基本上这将是一个 DDoS。

为了澄清(全局限制为 50 的示例):

SELECT * FROM movies;
> First 50 rows
SELECT * FROM movies LIMIT 10;
> First 10 rows
SELECT * FROM movies LIMIT 50,100;
> 50 rows (from 50 to 99)

是否有可能使用 PHP/MySQLi 或 MySQL 服务器本身来限制返回值的数量?还是我必须在查询中附加/替换LIMIT

【问题讨论】:

  • 我认为最简单的方法是使用一个配置文件条目来定义您的限制,然后每次通过 LIMIT 属性将该变量传递到您的查询中。我也认为这种方法没有任何问题。

标签: php mysql mysqli sql-limit


【解决方案1】:

您可以使用那里的查询并向其添加“LIMIT 50”。

如果他们自己添加了 LIMIT,只需使用正则表达式将其过滤掉,然后仍然添加您的 LIMIT。

【讨论】:

    【解决方案2】:

    我相信无论如何你都必须为自己构建一个分页器,我相信避免使用LIMIT 语句是不可能的。

    以下是我对 Paginator 的建议:

    if($_REQUEST['page'] == ""){
     $page = 1;
    }else{
     $page = $_REQUEST['page']; // perhaps double check if numeric
    }
    
    $perpage = 50;
    $start = ($page - 1) * $perpage;
    
    $limit_string = " LIMIT ". $start . "," . $perpage ;
    
    $query = "SELECT * FROM movies";
    $query .= $limit_string;
    

    希望有帮助

    【讨论】:

    • 您可以使用 javascript 或使用 php 在服务器上捕获这些用户错误
    【解决方案3】:

    您可以创建一个函数。 https://dev.mysql.com/doc/refman/5.0/en/create-function.html

    如果这有帮助,请告诉我们。

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2011-05-30
      • 1970-01-01
      • 2010-11-26
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多