2013-06-24 128 views
-1

我試圖從我的sql數據庫中取出,而不必將其加載到var中,然後使用for循環將所需項目拉出來。從sql中獲取特定索引

我怎樣才能在第五指數 「的5個項目」 5「」 10指數...

這是我在做什麼不是它的方式的hackish。

function get_db(a) { 
index_count=a 

db.transaction(
    function(tx) { 

    var rs = tx.executeSql('SELECT * FROM Greeting'); 
    var r="" 

    if (up_check === 0){ 
     index_count = index_count +4 
     } 
     r += rs.rows.item(index_count).salutation + ": " + rs.rows.item(index_count).salutee + "\t\t" 
    }) 
return r 
} 

我非常想要得到的東西像

var rs = tx.executeSql('SELECT * FROM index_count (and the next for items) Greeting'); 

回答

1

如果你的SQL Server 2005或以上,你可以使用ROW_NUMBER()

像這樣的東西(手繪):

SELECT *, ROW_NUMBER() OVER(ORDER BY [youordercolumns]) AS [RowNum] 
FROM [youtable]  
WHERE [RowNum] BETWEEN @index AND @index + 4 
1

這真的取決於你使用的數據庫服務器。

例如,MySQL支持很簡單的,但非標準溶液:

SELECT * FROM Greeting 
LIMIT 5 OFFSET yourStartingIndex 

其他服務器支持「具有偏移限」執行的一種或多種方式。

SQL標準提供了三種方式:

  • 使用OFFSET和第一次提取:(因爲SQL:2008)
SELECT * 
FROM Greeting 
OFFSET yourStartingIndex ROWS 
FETCH FIRST 5 ROWS ONLY 
  • 使用窗函數:(自SQL:2003)
SELECT * FROM (
    SELECT 
    ROW_NUMBER() OVER (ORDER BY YourOrderColumns ASC) AS rownum, 
    columns 
    FROM tablename 
) AS foo 
WHERE rownum > yourStartingIndex AND rownum <= (4+yourStartingIndex) 
  • 使用光標:
DECLARE cursor-name CURSOR FOR ... 
OPEN cursor-name 
FETCH RELATIVE number-of-rows-to-skip ... 
CLOSE cursor-name 

LINKS:http://troels.arvin.dk/db/rdbms/#select-limit-offset