Je cherche un moyen d'accomplir:
SELECT * FROM table
mais en utilisant LIMIT
et OFFSET
comme ceci:
SELECT * FROM table LIMIT all OFFSET 0
Existe-t-il un moyen d'écrire une instruction SQL en utilisant LIMIT et OFFSET tout en obtenant TOUT le résultat?
(Bien sûr, je peux utiliser une instruction IF
mais je l’évite plutôt si possible)
Toute aide serait appréciée!
Depuis la documentation MySQL :
Pour récupérer toutes les lignes d'un certain décalage jusqu'à la fin du résultat définir, vous pouvez utiliser un grand nombre pour le deuxième paramètre. Ce instruction récupère toutes les lignes de la 96ème à la dernière:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
Donc, obtenir toutes les lignes peut ressembler à ceci:
SELECT * FROM tbl LIMIT 0,18446744073709551615;
J'ai utilisé ce code dans nodeJS avec MySQL et il fonctionne bien, il peut vous aider ... Pourquoi vous l'utilisez?
Si vous souhaitez définir une limite, vous pouvez définir la limite avec la variable, sinon passez 0 avec la variable.
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;
Au fur et à mesure que l'enregistrement grandira, utilisez mysql_num_rows
pour rechercher dynamiquement le nombre total d'enregistrements, au lieu d'utiliser some large number
.
$cektotalrec=mysql_query("SELECT * FROM TABLE");
$numoffset=mysql_num_rows($cektotalrec);
$numlimit="0";
puis:
$final="SELECT * FROM table ".$numlimit.", ".$numoffset"";
Ce n’est peut-être pas la meilleure façon de le faire, mais c’est la première qui me vient à l’esprit ...
SELECT * FROM myTable LIMIT 0,1000000
Remplacez 1000000 par un nombre suffisamment grand qui, à votre connaissance, sera toujours supérieur au nombre total d'enregistrements dans le tableau.
Peut-être pas la solution la plus propre, mais fixer une limite à un nombre très élevé pourrait fonctionner. Le décalage doit être 0.
Pourquoi ne pas utiliser une instruction IF
dans laquelle vous ajoutez la limite et le décalage à la requête, car une instruction est vraie?
Vous pourriez recevoir une erreur si vous définissez la limite sur un nombre très élevé, comme défini par mysql doc. De ce fait, vous devriez essayer de le limiter à 9999999999999, monter plus haut peut vous donner une erreur, sauf si vous configurez le serveur pour aller plus haut.
Vous voudrez peut-être utiliser LIMIT dans une fonction, ce n'est donc pas une mauvaise idée. Si vous l'utilisez dans une fonction, vous voudrez peut-être que Limit All (Limiter tout) soit à un moment donné et limit à 1 à un autre point.
Ci-dessous, je liste un exemple où vous voudrez peut-être que votre application n'ait pas de limite.
function get_navigation ($ select = "*", $ from = "pages", $ visible = 1, $ subject_id = 2, $ order_by = "position", $ sort_by = "asc", $ offset = 0, $ limite = 9551615 ) { connexion globale $;
$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);