2012-11-29 43 views
0

我不熟悉PHP,甚至更新PHP與MS SQL,而不是MySQL。在做了一些研究之後,我想出了可以被視爲分頁查詢的用法,但顯然我在某處出錯,因爲它會引發錯誤。我不明白爲什麼。PHP MS_SQL分頁錯誤與查詢

繼承人的查詢:

SELECT TOP 10 * FROM Products WHERE SubCatID = '".$scid."' and ProductID NOT IN (SELECT TOP 0 * FROM Products ORDER BY ProductID ASC) ORDER BY ProductID ASC 

繼承人的錯誤:

Warning: mssql_query() [function.mssql-query]: message: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS. (severity 16)

我知道這是因爲子查詢的,但任何人都可以只點我在正確的方向請?

回答

2

您必須在子查詢中只選擇一列。例如

SELECT TOP 10 * FROM Products WHERE SubCatID = '".$scid."' and ProductID NOT IN (SELECT TOP 0 ProductID FROM Products ORDER BY ProductID ASC) ORDER BY ProductID ASC 
+0

謝謝男人:)我會接受,當我可以 – Bohdi

0

更好的分頁查詢中使用的將是這樣的:

SELECT * FROM (
    SELECT Products.*, 
     ROW_NUMBER() OVER (ORDER BY ProductID) AS __RN 
    FROM Products WHERE SubCatID = '".$scid."' ORDER BY ProductID 
) numberedRows 
WHERE __RN BETWEEN 1 and 10 

然後,您可以替換上您想要的行號的最後一行的數字。通常,你不應該使用*。實際上,您將在結果集中獲得一個名爲__RN的額外列。如果您指定列名稱,則不會發生。

+0

SO這是否也算行數呢?如果我將SELECT Products。*更改爲SELECT Products.ProductID,這會使它更容易? – Bohdi

+0

它給你選擇的行賦予數字。通過*,通常應該只選擇實際需要的列。即使你需要所有這些,你也應該明確地命名它們 - 這樣,即使添加了新列,或者現有列的順序發生了變化,你也可以獲得一致的輸出。 –