Выберите все записи, используя MySQL LIMIT и OFFSET запрос
Я ищу способ выполнить:
SELECT * FROM table
но используя LIMIT
и OFFSET
следующим образом:
SELECT * FROM table LIMIT all OFFSET 0
Есть ли способ написать инструкцию SQL с использованием LIMIT и OFFSET, но все равно получить ВСЕ результат?
(Конечно, я могу использовать оператор IF
, но я скорее избегаю его, если это возможно)
Любая помощь будет оценена!
Ответы
Ответ 1
Из Документация по MySQL:
Чтобы получить все строки с определенного смещения до конца результата set, вы можете использовать некоторое большое количество для второго параметра. Эта оператор извлекает все строки из 96-й строки до последней:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
Таким образом, получение всех строк может выглядеть следующим образом:
SELECT * FROM tbl LIMIT 0,18446744073709551615;
Ответ 2
Это может быть не лучший способ сделать это, но это первое, что приходит на ум...
SELECT * FROM myTable LIMIT 0,1000000
Замените 1000000 с некоторым достаточно большим количеством, которое, как вы знаете, всегда будет больше, чем общее количество записей в таблице.
Ответ 3
Я использовал этот код в nodeJS с MySQL, и он работает хорошо, он может вам помочь.
Почему вы его используете?
- Он надежный, потому что это строка, которая будет добавляться с запросом.
-
Если вы хотите установить лимит, вы можете поместить ограничение с переменной, иначе передайте 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;
Ответ 4
Возможно, не самое чистое решение, но установка предела на очень высокое число может работать. Смещение должно быть 0.
Почему бы не использовать оператор IF
, где вы добавляете ограничение и смещение к запросу, поскольку утверждение истинно?
Ответ 5
По мере роста записи используйте 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"";
Ответ 6
-
Вы можете получить сообщение об ошибке, если вы установите ограничение на очень большое число, как определено в mysql doc. В этом случае вы должны попытаться ограничить его 9999999999999, идя выше, может дать вам ошибку, если вы не настроите сервер выше.
-
Вы можете использовать LIMIT в функции, поэтому это неплохая идея. Если вы используете его в функции, вы можете захотеть, чтобы это было Limit All в одной точке и ограничение 1 в другой точке.
-
Ниже приведен список примеров, в которых вы, возможно, хотите, чтобы ваше приложение не имело ограничений.
function 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);