和我之间有什么区别,在我的情况下,更好的选择是什么?

时间:2016-02-10 10:48:12

标签: php mysql while-loop limit between

我有一个包含数百行的表,我想获取特定的行,我使用了LIMIT以及id和id之间的行 在我的应用程序中,我有两个文本输入,一个用于START NUMBER,一个用于END NUMBER,当我使用LIMIT时,我需要告诉用户做出正确的计算以获得正确的开始和结束 所以例如,如果我有一个3000行的表,并且我想选择2000行以上的100行,那么查询将是:

Select * from table LIMIT 2000,100

这将选择2000行以上的100行

介于方法之间:

在between方法中,我在所有表格上运行while函数,并且我使用IF语句来获取正确的id,这就是我正在做的事情:< / p>

Select * from table

$datastart = $_POST["datastart"];
$dataend = $_POST["dataend"];
$firstid = 0;
$lastid = 0;
$varcount6=1;

$sql = "select ID  from users_info";
$sqlread = mysqli_query($conn,$sql);

while($row = mysqli_fetch_assoc($sqlread)){

    if($datastart==$varcount6){
        $firstid = $rowdirstid["ID"];
    }

    if($varcount6>=$dataend){
        $lastid = $rowdirstid["id1"];

        break;
    }

    $varcount6++;
}

所以现在我有第一个id和表的最后一个id,接下来我使用另一个sql查询:

Select * from table where id between $firstid and $lastid

两者都有效

我的问题是:如果我每次都要加载大量数据,我该怎么用?

我应该一起去吗?或者LIMIT会完成工作吗?

2 个答案:

答案 0 :(得分:1)

首先,你永远不应该使用PHP来获取所需的数据,坚持只在SQL中这样做,因为从不需要PHP。

您正在使用的限制查询不会针对您尝试执行的操作进行限制,因为它不会关心条目的ID,因此,如果您的ID为&#39; s不是100%连续,你不会得到理想的结果。

您应该使用帖子底部显示的中间查询。

但是,既然你还没有提供完整的代码,我就不能说你是否对这个输入进行了清理,但这始终是一件好事。最好还是使用参数化查询。

答案 1 :(得分:0)

如果您确定ID是连续的,请使用SELECT * FROM t WHERE id BETWEEN a AND b ORDER BY ID ASC 如果使用LIMIT,则SQL引擎必须扫描并排序所有第一批结果。 (并索引id字段)