it-swarm.com.de

Wählen Sie alle Datensätze mithilfe der MySQL-Abfrage LIMIT und OFFSET aus

Ich suche nach einem Weg, um zu erreichen:

SELECT * FROM table

aber mit LIMIT und OFFSET wie folgt:

SELECT * FROM table LIMIT all OFFSET 0

Gibt es eine Möglichkeit, die SQL-Anweisung using LIMIT und OFFSET zu schreiben, aber trotzdem ALLE Ergebnisse zu erhalten?
(Natürlich kann ich eine IF-Anweisung verwenden, aber ich vermeide es, wenn möglich). 

Jede Hilfe wäre dankbar!

23
Lior Elrom

Aus der MySQL-Dokumentation :

Abrufen aller Zeilen ab einem bestimmten Offset bis zum Ende des Ergebnisses eingestellt, können Sie eine große Zahl für den zweiten Parameter verwenden. Diese Die Anweisung ruft alle Zeilen von der 96. bis zur letzten Zeile ab:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

So erhalten Sie alle Zeilen wie folgt:

SELECT * FROM tbl LIMIT 0,18446744073709551615;
30
sroes

Ich habe diesen Code in nodeJS mit MySQL verwendet und er läuft gut, er kann Ihnen helfen ... Warum verwenden Sie ihn? 

  1. Es ist zuverlässig, weil es eine Zeichenfolge ist, die mit der Abfrage angehängt wird.
  2. Wenn Sie eine Begrenzung setzen möchten, können Sie die Begrenzung mit der Variablen setzen, ansonsten übergeben Sie 0 mit der Variablen. 

    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

Verwenden Sie mysql_num_rows, um die Gesamtzahl der Datensätze dynamisch zu ermitteln, anstatt some large number zu verwenden.

$cektotalrec=mysql_query("SELECT * FROM TABLE");
$numoffset=mysql_num_rows($cektotalrec); 
$numlimit="0";

dann:

$final="SELECT * FROM table ".$numlimit.", ".$numoffset"";
2

Dies ist möglicherweise nicht der beste Weg, um es zu tun, aber es ist der erste, der mir in den Sinn kommt ...

SELECT * FROM myTable LIMIT 0,1000000

Ersetzen Sie 1000000 durch eine ausreichend große Anzahl, von der Sie wissen, dass sie immer größer ist als die Gesamtzahl der Datensätze in der Tabelle.

2
Nate S.

Vielleicht nicht die sauberste Lösung, aber die Begrenzung auf eine sehr hohe Anzahl könnte funktionieren. Offset muss 0 sein.

Warum verwenden Sie nicht eine IF-Anweisung, in der Sie der Abfrage den Grenzwert und den Versatz hinzufügen, da eine Anweisung wahr ist?

1
AgeDeO
  1. Möglicherweise erhalten Sie eine Fehlermeldung, wenn Sie den Grenzwert auf eine sehr hohe Anzahl setzen, wie in mysql doc definiert. Aus diesem Grund sollten Sie versuchen, es auf 9999999999999 zu beschränken. Wenn Sie höher gehen, erhalten Sie möglicherweise einen Fehler, sofern Sie den Server nicht so einrichten, dass er höher wird.

  2. Möglicherweise möchten Sie LIMIT in einer Funktion verwenden, daher ist dies keine schlechte Idee. Wenn Sie es in einer Funktion verwenden, möchten Sie möglicherweise, dass es an einem Punkt "Alle begrenzen" und an einem anderen Punkt "1" ist. 

  3. Im Folgenden listen wir ein Beispiel auf, bei dem Ihre Anwendung möglicherweise unbegrenzt ist. 

funktion get_navigation ($ select = "*", $ from = "pages", $ visible = 1, $ subject_id = 2, $ order_by = "position", $ sort_by = "asc", $ offset = 0, $ limit = 9551615) ) { globale $ verbindung;

$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