2012-02-14 37 views
4

グローバルLIMITが設定されていない場合に返される行の総数をカウントしようとしています。ここに私のクエリは次のようになります。LIMITのUNIONクエリ(UNION ALLではなく)のSQL_CALC_FOUND_ROWSおよびSELECT FOUND_ROWS()

SELECT SQL_CALC_FOUND_ROWS * FROM table1 WHERE [...] 
UNION 
SELECT * FROM table2 WHERE [...] 
UNION 
SELECT * FROM table3 WHERE [...] 
UNION 
SELECT * FROM table4 WHERE [...] 
LIMIT 0,30 

その後、私はすぐにSELECT FOUND_ROWS()クエリでそれに従ってください。これは合計35行を返しますが、合計400行を返します。どのように私はUNION ALLを使用せずに行を数えることができますか?

+2

calc_found_rowsあなたは労働組合をやっている時に壊れる問合せごとに動作します。実際には2つのクエリが1つに結合されているため、ユニオン全体ではなく、ユニオンで実行されたLASTクエリの検索された行しか取得できません。 –

+0

この種のクエリで行数を達成する方法はありますか? – tim

答えて

8

使用するすべての労働組合の選択のための一時テーブル:

SELECT SQL_CALC_FOUND_ROWS * FROM 
(
    SELECT * FROM table1 WHERE [...] 
    UNION 
    SELECT * FROM table2 WHERE [...] 
    UNION 
    SELECT * FROM table3 WHERE [...] 
    UNION 
    SELECT * FROM table4 WHERE [...] 
) temp_table 
LIMIT 0,30 
+0

ありがとうございます!答えはとても素晴らしく、あなたの助けに感謝しました! – tim

関連する問題