ПРЕДЕЛ SQL ПРОТИВ предела цикла

#php #sql #count #while-loop #limit

#php #sql #количество #while-цикл #ограничение

Вопрос:

Я просматривал Stack Overflow, пытаясь найти, как ограничить SQL-запрос циклом while, и я наткнулся на этот код.

 $count = 0;

while ($count < 4 amp;amp; $info = mysql_fetch_assoc($result)) {
    //stuff

    $count  ;
}
  

Вопрос 1: В чем разница между этим кодом и использованием LIMIT предложения SQL?

Вопрос 2: По какой причине кто-то захочет использовать этот код, а не использовать LIMIT ?

Ответ №1:

  1. С помощью этого кода сервер MySQL отправит все результаты клиенту, но клиент игнорирует все после 4-й строки. Таким образом, серверу приходится выполнять больше работы, и между клиентом и сервером будет использоваться больше пропускной способности.

  2. Они могут захотеть использовать mysql_num_rows() , чтобы узнать, сколько всего строк было выбрано, даже если они хотят отобразить только первые 4. Однако MySQL предоставляет способ сделать это с LIMIT помощью — вы можете поместить SQL_CALC_FOUND_ROWS параметр в SELECT предложение, а затем использовать SELECT FOUND_ROWS() для получения общего количества строк. Так что нет веской причины, кроме того, что они не знают об этой функции.

Ответ №2:

Все, что сказал @Barmar, правильно. Выполнение подобного кода вызовет множество проблем, поскольку ваши результирующие наборы начнут расти. Пусть база данных делает то, что умеет делать, пусть она предоставляет лимит результатов, которые вы хотите / нуждаетесь. Просто подумайте, что происходит, когда вы выполняете предложение SELECT без ОГРАНИЧЕНИЯ в клиенте командной строки, где тысячи rows…it просто продолжается и продолжается.

Еще одна вещь, я бы не рекомендовал использовать mysql_num_rows() как устаревшую функцию. С таким же успехом можно использовать mysqli или PDO.