Я ищу способ достижения:
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, и он работает хорошо, это может вам помочь. Почему вы его используете?
Если вы хотите установить лимит, вы можете поместить ограничение с переменной, иначе передайте 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
котором вы добавляете лимит и смещение к запросу, поскольку утверждение истинно?
Вы можете получить сообщение об ошибке, если вы установите ограничение на очень большое число, как определено в mysql doc. Таким образом, вы должны попытаться ограничить его 9999999999999, идя выше, может дать вам ошибку, если вы не настроите сервер выше.
Вы можете использовать LIMIT в функции, поэтому это неплохая идея. Если вы используете его в функции, вы можете захотеть, чтобы это было Limit All в одной точке и ограничение 1 в другой точке.
Ниже я приведу пример, в котором вы, возможно, хотите, чтобы ваше приложение не имело ограничений.
функция 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"";