Выберите все записи, используя MySQL LIMIT и OFFSET запрос

Я ищу способ достижения:

SELECT * FROM table 

но используя LIMIT и OFFSET например:

 SELECT * FROM table LIMIT all OFFSET 0 

Есть ли способ написать инструкцию SQL, используя LIMIT и OFFSET, но все еще получая ВСЕ результат?
(Конечно, я могу использовать оператор IF но я скорее избегаю его, если это возможно)

Любая помощь будет оценена!

Из документации MySQL :

Чтобы получить все строки с определенного смещения до конца результирующего набора, вы можете использовать некоторое большое количество для второго параметра. Этот оператор извлекает все строки из 96-й строки в последнюю:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

Таким образом, получение всех строк может выглядеть следующим образом:

 SELECT * FROM tbl LIMIT 0,18446744073709551615; 

Это может быть не лучший способ сделать это, но это первое, что приходит на ум …

SELECT * FROM myTable LIMIT 0,1000000

Замените 1000000 с некоторым достаточно большим количеством, которое, как вы знаете, всегда будет больше, чем общее количество записей в таблице.

Я использовал этот код в nodeJS с MySQL, и он работает хорошо, это может вам помочь. Почему вы его используете?

  1. Он надежный, потому что это строка, которая будет добавляться с запросом.
  2. Если вы хотите установить лимит, вы можете поместить ограничение с переменной, иначе передайте 0 с переменной.

     var noOfGroupShow=0; //0: all, rest according to number if (noOfGroupShow == 0) { noOfGroupShow = ''; } else { noOfGroupShow = ' LIMIT 0, '+noOfGroupShow; } var sqlGetUser = "SELECT `user_name`,`first_name`,`last_name`,`image`,`latitude`, `longitude`,`phone`,`gender`,`country`,`status_message`,`dob` as user_date_of_birth FROM `tb_user` WHERE `user_id`=?"+noOfGroupShow; 

Может быть, не самое чистое решение, но установка предела на очень высокое число может работать. Смещение должно быть 0.

Почему бы не использовать оператор IF котором вы добавляете лимит и смещение к запросу, поскольку утверждение истинно?

  1. Вы можете получить сообщение об ошибке, если вы установите ограничение на очень большое число, как определено в mysql doc. Таким образом, вы должны попытаться ограничить его 9999999999999, идя выше, может дать вам ошибку, если вы не настроите сервер выше.

  2. Вы можете использовать LIMIT в функции, поэтому это неплохая идея. Если вы используете его в функции, вы можете захотеть, чтобы это было Limit All в одной точке и ограничение 1 в другой точке.

  3. Ниже я приведу пример, в котором вы, возможно, хотите, чтобы ваше приложение не имело ограничений.

функция get_navigation ($ select = "*", $ from = "pages", $ visible = 1, $ subject_id = 2, $ order_by = "position", $ sort_by = "asc", $ offset = 0, $ limit = 9551615 ) {global $ connection;

 $query = " SELECT {$select} "; $query .= " FROM {$from} "; $query .= " WHERE visible = {$visible} "; $query .= " AND subject_id = {$subject_id} "; $query .= " ORDER BY {$order_by} {$sort_by} "; $query .= " LIMIT {$offset}, {$limit} "; mysqli_query($connection, $query); $navigation_set = mysqli_query($connection, $query); confirm_query($navigation_set); return $navigation_set; } define ("SELECT", "*"); define ("FROM", "pages"); define ("VISIBLE", 1); define ("SUBJECT_ID", 3); define ("ORDER_BY", "position"); define ("SORT_BY", "ASC"); define ("LIMIT", "0"); $navigation_set = get_navigation(SELECT, FROM, VISIBLE, SUBJECT_ID, ORDER_BY, SORT_BY); 

По мере роста записи, используйте mysql_num_rows для динамического поиска общего количества записей вместо использования some large number .

 $cektotalrec=mysql_query("SELECT * FROM TABLE"); $numoffset=mysql_num_rows($cektotalrec); $numlimit="0"; 

тогда:

 $final="SELECT * FROM table ".$numlimit.", ".$numoffset"";