0

私はPHPが初めてで、MySQLではなくMS SQLを使用したPHPはさらに新しいです。いくつかの調査を行った後、使用するページネーションクエリと見なされるものを思いつきましたが、エラーがスローされるため、明らかにどこかで間違っています。そして、私はその理由を理解していません。

クエリは次のとおりです。

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)

サブクエリが原因であることは理解していますが、誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

2

サブクエリ内で 1 つの列のみを選択する必要があります。例

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
于 2012-11-29T10:43:05.187 に答える
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。列名を指定すると、それは起こりません。

于 2012-11-29T10:55:19.867 に答える