2012-04-28 19 views
0

SQLでLIMITを適用する前に、(ページングセレクタの)レコードの総数を数える最善の方法を見つけようとしています。句。日付選択、LIMIT、ページングによるPHP MySqlレコード数

私は、これを実現するために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すべての例が大幅​​に方法が異なり、そして私は、柔軟かつ効率的な方法でこれらの要件を組み合わせた最善の方法を知ってみたいということです。私はCOUNTとLIMITのために文のようなものを組み合わせることができていませんでした

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) 

-

私はもともとなど(日付範囲の)柔軟性のための方法が、多くの例の間で使用句を選びました1つの操作で両方を行うことが可能かどうかわかりません(LIMITがCOUNTに影響を及ぼすため、私は「仮定」していません)

最良の会議方法のアドバイスや例この一般的な要件は、最も感謝して受け取ります。事前に多くの感謝。

答えて

0

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

私の経験則はKISS(Keep It Simple Stupid)ですので、私は個人的に可能な限りBETWEENメソッドに固執していますが、そうでない場合は必ず指示する状況があります。私はあなたがDATEとCOUNTを何らかの方法で分けることができるとは確信していません。あなたはを選択しています。レコードセットはレコードセットにあり、COUNTは選択したレコードのグループ(GROUP BYで使用される)に作用する集合関数です。

+0

Ok Greg、BETWEENがOkであることを確認してくれてありがとう。使用法の混乱をおかけして申し訳ありませんが、2つの独立したクエリであることを示すために、2つの別個のSQLワーム名を使用しました。私はちょうどあなたが私の例ではJOINを省略することができますし、JOIN、DATEで完全なレコードセットのSELECTを行うことができますので、あなたはかなり高速でなければならない同一のWHEREクエリを最初に使用してCOUNT(ID)を行う必要があると推定している範囲の選択とLIMIT節。私の質問は多岐にわたっていたので多岐にわたっていましたが、最終結果はADOの後ではいつも厄介なように見えます。私の例はおそらくそれを行う最速の方法ですか? – KenAshton

+0

まあ、正規化されたテーブルでうまく構成されたSQLを書いているという前提で、データベースエンジンはデータ管理タスクを「効率的に」扱うように設計されているので、これらのクエリは、あなたは欲しい。純粋主義者はその声明で主張するかもしれませんし、学問的に正しいかもしれませんが、パフォーマンス上の問題がなければ、私は物事の壮大な計画においてSQLに何か間違いは見られません。 – GDP

+0

私は習慣からテーブルを厳格に正規化します。あなたは私があまりにも遠く離れて迷子にならなかったという私を(私は素人です)安心させました。ありがとう兄貴。 – KenAshton