使用MySQL LIMIT和OFFSET查询选择所有记录

时间:2013-04-11 14:04:16

标签: php mysql sql postgresql activerecord

我正在寻找一种方法来实现:

SELECT * FROM table

但是如此使用LIMITOFFSET

SELECT * FROM table LIMIT all OFFSET 0

有没有办法编写SQL语句使用 LIMIT和OFFSET但是仍然得到所有结果?
(当然我可以使用IF语句,但如果可能,我宁愿避免使用它)

任何帮助将不胜感激!

7 个答案:

答案 0 :(得分:30)

来自MySQL documentation

  

从特定偏移量检索所有行直到结果的末尾   设置,您可以使用一些大数字作为第二个参数。这个   语句检索从第96行到最后一行的所有行:

     

SELECT * FROM tbl LIMIT 95,18446744073709551615;

因此获取所有行可能如下所示:

SELECT * FROM tbl LIMIT 0,18446744073709551615;

答案 1 :(得分:2)

这可能不是最好的方法,但它是第一个想到的......

SELECT * FROM myTable LIMIT 0,1000000

将1000000替换为一些足够大的数字,您知道这些数字总是大于表格中的记录总数。

答案 2 :(得分:2)

我在带有MySQL的nodeJS中使用了这个代码并且它运行良好,它可能对你有所帮助。 你为什么用它?

  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;
    

答案 3 :(得分:2)

随着记录的增长,使用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"";

答案 4 :(得分:1)

也许不是最干净的解决方案,但设置极限数量的限制可能有效。偏移量必须为0.

为什么不使用IF语句,在语句为真的情况下向查询添加限制和偏移量?

答案 5 :(得分:1)

是的,可以通过提供NULL

SELECT * FROM tab LIMIT NULL OFFSET NULL

db<>fiddle PostgreSQL demo

7.6. LIMIT and OFFSET

LIMIT ALL与省略LIMIT子句相同,LIMIT带有NULL参数也是如此。


Snowflake LIMIT / FETCH

NULL 空字符串('') $$$$ 也被接受,并被视为 “无限” ;如果将参数动态绑定到语句时,连接器和驱动程序(例如JDBC驱动程序)收到不完整的参数列表,则这对它们很有用。

SELECT * FROM demo1 ORDER BY i LIMIT NULL OFFSET NULL;

SELECT * FROM demo1 ORDER BY i LIMIT '' OFFSET '';

SELECT * FROM demo1 ORDER BY i LIMIT $$$$ OFFSET $$$$; 

答案 6 :(得分:-1)

  1. 如果将限制设置为mysql doc定义的非常高的数字,则可能会收到错误。因此,您应该尝试限制它9999999999999,除非您将服务器设置为更高,否则更高可能会给您一个错误。

  2. 您可能希望在函数中使用LIMIT,因此这不是一个坏主意。如果在函数中使用它,您可能希望它在一个点上限制为全部并在另一个点限制1。

  3. 下面,我列出了您可能希望应用程序没有限制的示例。

  4. 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);