2016-02-10 52 views
3

我有一張有數百行的表格,我想要獲取特定的行,我使用了限制以及ID和ID之間的關係 在我的應用程序中,我有兩個文本輸入,一個是起始號碼,一個是結束號碼,當我使用LIMIT時,我需要告訴用戶做出正確的計算以獲得正確的開始和結束 因此,例如,如果我有一個3000行的表,並且我想選擇2000行以上的100行,查詢將會:while和between之間的區別是什麼,在我的情況下什麼是更好的選擇?

Select * from table LIMIT 2000,100 

這將方法之間選擇高於2000

的100行

在方法之間,我運行的所有表,而功能和我使用IF語句,以獲得正確的ID這裏是我在做什麼:

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將完成這項工作?

+1

這太可怕了,你每次都在做一次完整的表掃描。爲什麼不使用正常的索引和條件?示例:2000以上的100個元素。SELECT * FROM表WHERE ID> = 2000 ORDER BY ID LIMIT 100 – PerroVerd

+1

@PerroVerd這是錯誤的,因爲ID不是真正的行索引所必需的。代碼'從表LIMIT 2000,100'選擇*比您的建議更好。 –

回答

0

如果您確定ID是連續的,請使用SELECT * FROM t WHERE id BETWEEN a AND b ORDER BY ID ASC 如果您使用LIMIT,則SQL引擎必須掃描並排序所有第一個結果。 (並且索引id字段)

1

首先,您絕對不應該使用PHP來獲取所需的數據,因爲完全不需要使用PHP,因此完全不需要使用PHP。

您正在使用的限制查詢不會削減您正在嘗試執行的操作,因爲它不會關心該條目的ID是什麼,因此,如果您的ID不是100%連續的,您將無法獲得期望的結果。

您應該使用您在帖子底部顯示的查詢。

但是,由於您沒有提供完整的代碼,所以我不能說您是否清理了該輸入,但這總是值得記住的。最好使用參數化查詢。

相關問題