web-dev-qa-db-ja.com

MySQL LIMITおよびOFFSETクエリを使用してすべてのレコードを選択します

私は達成する方法を探しています:

SELECT * FROM table

しかし、LIMITOFFSETを使用すると、次のようになります。

SELECT * FROM table LIMIT all OFFSET 0

SQLステートメントを記述する方法はありますかsing LIMITおよびOFFSETを使用しても、すべての結果が得られますか?
(もちろんIFステートメントを使用できますが、可能な場合は避けます)

助けていただければ幸いです!

25
Lior Elrom

MySQLドキュメント から:

特定のオフセットから結果セットの最後までのすべての行を取得するには、2番目のパラメーターに大きな数値を使用できます。次のステートメントは、96行目から最後の行までのすべての行を取得します。

SELECT * FROM tbl LIMIT 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

これは最善の方法ではないかもしれませんが、最初に思い浮かぶのは...

SELECT * FROM myTable LIMIT 0,1000000

1000000を、テーブル内のレコードの合計数よりも常に大きいことがわかっている十分に大きい数で置き換えます。

2
Nate S.

おそらく、最もクリーンなソリューションではありませんが、非常に高い数に制限を設定することで機能します。オフセットは0である必要があります。

ステートメントがtrueであるため、クエリに制限とオフセットを追加するIFステートメントを使用しないのはなぜですか?

1
AgeDeO
  1. Mysql docで定義されているように、制限を非常に高い数に設定すると、エラーが表示される場合があります。そのため、9999999999999に制限する必要があります。サーバーを高く設定しない限り、高くするとエラーが発生する可能性があります。

  2. 関数でLIMITを使用することもできますが、それは悪い考えではありません。関数で使用する場合、ある点ですべてを制限し、別の点で1を制限することができます。

  3. 以下に、アプリケーションに制限を設けない場合の例をリストします。

function get_navigation($ select = "*"、$ from = "pages"、$ visible = 1、$ subject_id = 2、$ order_by = "position"、$ sort_by = "asc"、$ offset = 0、$ limit = 9551615 ){グローバル$ 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); 
0
Lesly Revenge