Ограничить результаты всех запросов MySQL

Я написал интерфейс PHP / MySQLi, в котором пользователь может вводить запросы SQL, а затем сервер возвращает результаты в виде таблицы (или печатает OK на INSERTс и UPDATEs)

Распечатка результатов может занять очень много времени (например, SELECT * FROM movies) в отрывке IMDb с примерно 1,6 млн. фильмов, 1,9 млн. актеров и 3,2 млн. ключевых слов я ограничил выход до 50 строк, отменив цикл печати после 50 итераций.

Однако сами запросы также занимают довольно много времени, поэтому я надеялся, что, возможно, удастся установить глобальное максимальное возвращаемое значение строки, несмотря на то, LIMIT Ключевое слово используется или нет. Я намеревался использовать сервер только для собственной практики, но поскольку некоторые люди в моем классе борются с внешним интерфейсом, предоставленным преподавателем (Windows EXE, но половина класса использует Mac / Linux), я решил сделать его доступным для их тоже. Но я хочу предотвратить сбой моей виртуальной машины Debian из-за … ну, по сути, это будет 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 в / в запросах?

0

Решение

Вы можете использовать там запросы и добавить «LIMIT 50» к нему.

И если они добавили LIMIT сами, просто отфильтруйте его с помощью регулярных выражений и все равно добавьте свой LIMIT.

1

Другие решения

Я считаю, что вы все равно должны создать себе пагинатор, избегая использования 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;

надеюсь, это поможет

0

Вы можете создать функцию.
https://dev.mysql.com/doc/refman/5.0/en/create-function.html

Дайте нам знать, если это поможет.

0
По вопросам рекламы [email protected]