0

SQL句でLIMITを適用する前に、(ページングセレクターの)レコードの総数をカウントする最良の方法を見つけようとして、少し混乱しました。

これを達成するために2つのクエリを使用しており、必要な特定のビューのWHERE句を変えています。

$sqlcount = "SELECT COUNT(invnum) AS num 
FROM tblinvoices
WHERE invcustid>0 AND invstat>0 AND invdate 
BETWEEN '$startdate' AND '$enddate'

$sqlquery = "SELECT $fieldlist 
FROM tblinvoices 
INNER JOIN tblcontacts 
ON tblinvoices.invcustid = tblcontacts.ID 
WHERE invcustid>0 AND invstat>0 AND invdate 
BETWEEN '$startdate' AND '$enddate'
ORDER BY invdate
LIMIT 0,$pagerows";

私の問題は、DATE および COUNT クエリと PAGING を組み合わせた例で見られるすべての例が方法が大きく異なることです。これらの要件を柔軟かつ効率的な方法で組み合わせる最良の方法を知りたいと思っています。

最初は柔軟性のために BETWEEN メソッドを選択しましたが、多くの例 (日付範囲の場合) では次のような句が使用されています。

SELECT MIN(date) AS date1, MAX(date) AS date2 FROM mytable
WHERE (MONTH(date) = (SELECT Month(MAX(date))-1 FROM mytable )
OR MONTH(date) = (SELECT Month(MAX(date))-2 FROM mytable ))
AND YEAR(date) = (SELECT YEAR(MAX(date))
FROM mytable)

ページングの目的でそのようなステートメントを COUNT および LIMIT と組み合わせることができず、1 つの操作で両方を実行できるかどうかもわかりません (LIMIT が COUNT に影響するため、不可能であると「推定」しています)。

この一般的な要件を満たすための最善の方法 (私が考えたもの) のアドバイスや例は、非常にありがたく受け取られます。よろしくお願いします。

4

1 に答える 1

0

私はあなたが何を求めているのか完全には理解していません-あなたはカウントを取得するためにこれらの両方のクエリを常に一緒に使用していて、次にそのカウントに一致するレコードを使用していますか?もしそうなら、おそらくGROUPBYとCOUNTを使用する単一のSQLステートメントでうまくいくでしょう。

私の親指のルールはKISS(Keep It Simple Stupid)なので、個人的には可能な限りBETWEENメソッドを使用するのが好きですが、それ以外の場合は常に状況があります。ただし、DATEとCOUNTをどのように分離できるかはわかりません。これを使用して、レコードセットに含めるレコードを選択します。COUNTは、選択したレコードのグループ(GROUP BYで使用)に作用する集計関数です。

于 2012-04-28T03:28:41.477 に答える