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に影響を及ぼすため、私は「仮定」していません)最良の会議方法のアドバイスや例この一般的な要件は、最も感謝して受け取ります。事前に多くの感謝。
Ok Greg、BETWEENがOkであることを確認してくれてありがとう。使用法の混乱をおかけして申し訳ありませんが、2つの独立したクエリであることを示すために、2つの別個のSQLワーム名を使用しました。私はちょうどあなたが私の例ではJOINを省略することができますし、JOIN、DATEで完全なレコードセットのSELECTを行うことができますので、あなたはかなり高速でなければならない同一のWHEREクエリを最初に使用してCOUNT(ID)を行う必要があると推定している範囲の選択とLIMIT節。私の質問は多岐にわたっていたので多岐にわたっていましたが、最終結果はADOの後ではいつも厄介なように見えます。私の例はおそらくそれを行う最速の方法ですか? – KenAshton
まあ、正規化されたテーブルでうまく構成されたSQLを書いているという前提で、データベースエンジンはデータ管理タスクを「効率的に」扱うように設計されているので、これらのクエリは、あなたは欲しい。純粋主義者はその声明で主張するかもしれませんし、学問的に正しいかもしれませんが、パフォーマンス上の問題がなければ、私は物事の壮大な計画においてSQLに何か間違いは見られません。 – GDP
私は習慣からテーブルを厳格に正規化します。あなたは私があまりにも遠く離れて迷子にならなかったという私を(私は素人です)安心させました。ありがとう兄貴。 – KenAshton