2012-04-08 23 views
0

の数を取得し、私は次のクエリによって返される行の合計数をカウントしたいと思います:複雑なクエリ

SELECT table1.*, COUNT(table2.fk) * (100/18) AS 'number' 
FROM table1 INNER JOIN table2 ON table1.pk = table2.fk 
WHERE table1.Street LIKE '$Street%' 
AND table1.City LIKE '$City%' 
AND table1.Zip LIKE '%$Zip' 
AND table1.DOBY LIKE '%$DOBY' 
AND table1.DOBM LIKE '%$DOBM' 
AND table1.DOBD LIKE '%$DOBD' 
AND table1.Gender LIKE '$gender%' 
AND table2.year>= 2004 
AND table2.type IN ('AA', 'AB', 'AC') 
GROUP BY table2.fk 
HAVING (COUNT(table2.fk) * (100/18)) >= '$activity' 
ORDER BY DOBY, DOBM, DOBD ASC 

問合せは、TABLE1の主キーは、表2の外部キーとして発生数や回数をカウントし固定金額に基づいてパーセンテージ( '数')を計算します。十分にうまくいきますが、私のページ作成スクリプトで見つかったレコードの総量を得ることができません。 誰かが何か提案や解決策を提供できるのであれば、私はそれを感謝します。

+0

サブクエリの作業(「(SELECT COUNT(id)FROM table WHERE conditional = $ variable)AS count」)を実行するとしますか?または、あなたが何のために必要なこのクエリですか? 'LIMIT'というキーワードは表示されません。 –

+0

これはカウントが必要なクエリです。はるかに複雑ですが、簡単にするために少し編集しました。 limitキーワードは、最後の行 "LIMIT $ start、$ limit;"の後に来ます。 – deathonater

答えて

0

uはSQL_CALC_FOUND_ROWS(正確な構文のためのgoogle)
を行い、その後、

+0

多くの感謝!私が使用している非常に大きなデータベースでは少し遅いですが、今のところ動作しなければなりません。 – deathonater

+0

非常に大きい場合は、カウントをキャッシュする必要があります。誰も本当に大きな数字のためにページ番号に正確な数字(イベントGoogleではない)を与えてください。もう1つのことは、初めてこれを使用するだけです。間違いなく小さな時間間隔でキャッシュする必要があります。 –

0

SELECT FOUND_ROWS() AS totalがイタイMoavが言うに行く使用することができ、プログラミング言語はfound_rows機能のための機能を持っている必要があります。 function documentationによれば、LIMITキーワードが存在しない場合、LIMITキーワードのSELECTステートメントの行数を返します。

もしそうでない場合は、という別のSELECTクエリをデータベースに作成することができます。同じ情報が返されます。