簡體   English   中英

限制所有MySQL查詢的結果

[英]Limit results of all MySQL queries

我編寫了一個PHP / MySQLi前端,用戶可以在其中輸入SQL查詢,然后服務器將結果返回到表中(或在INSERTUPDATE上打印OK)。

由於打印結果可能需要很長的時間(例如SELECT * FROM movies ),而包含大約160萬部電影,190萬個actor和320萬個關鍵字的IMDb提取物中,我通過取消打印循環后將輸出限制為50行50次迭代。

但是,查詢本身也要花費一些時間,因此我希望可以設置全局最大行返回值,無論是否使用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 50”。

如果他們自己添加了LIMIT,則只需使用正則表達式將其過濾掉,然后仍然添加LIMIT。

我相信您無論如何都必須建立自己的分頁器,我相信避免使用LIMIT語句是不可能的。

這是我對分頁器的建議:

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;

希望能有所幫助

您可以創建一個函數。 https://dev.mysql.com/doc/refman/5.0/en/create-function.html

讓我們知道是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM