it-roy-ru.com

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

Я ищу способ достичь:

SELECT * FROM table

но используя LIMIT и OFFSET, вот так:

SELECT * FROM table LIMIT all OFFSET 0

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

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

23
Lior Elrom

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

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

ВЫБЕРИТЕ * ОТ ТАБЛИЧНОГО ОГРАНИЧЕНИЯ 95,18446744073709551615;

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

SELECT * FROM tbl LIMIT 0,18446744073709551615;
30
sroes

Я использовал этот код в 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;
    
2
Pritam Jana

Поскольку запись будет расти, используйте 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"";
2
Farid Rudiansyah

Возможно, это не лучший способ сделать это, но это первое, что приходит на ум ...

SELECT * FROM myTable LIMIT 0,1000000

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

2
Nate S.

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

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

1
AgeDeO
  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 ) { глобальное $ соединение;

$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); 
0
Lesly Revenge