LIMIT 使用時に MySQL で UNION ALL を使用して個々の SELECT ステートメントの結果行数を取得する

StackOverflow https://stackoverflow.com/questions/1318205

  •  19-09-2019
  •  | 
  •  

質問

LIMIT を使用する UNION ALL SELECT クエリ内の個々の SELECT ステートメントの行数を取得する必要があります。MySQL ドキュメントでは、取得について非常に明確に説明されています。 グローバル行数 クエリの場合 (個々の SELECT を括弧内に配置し、SQL_CALC_FOUND_ROWS を括弧内にのみ配置します) 初め ステートメントを実行し、通常の方法で FOUND_ROWS() を取得します)。ただし、結果の行数も必要です。 個人 SELECT ステートメント。クエリを簡略化すると次のようになります。

(SELECT SQL_CALC_FOUND_ROWS `field1`,`field2` FROM `db`.`table1` WHERE `id`>1000)
UNION ALL
(SELECT `field1`,`field2` FROM `db`.`table2` WHERE `id`>1000)
UNION ALL
...
(SELECT `field1`,`field2` FROM `db`.`tableN` WHERE `id`>1000)
LIMIT 0,10

SQL_CALC_FOUND_ROWS が配置されている場合 SELECT ステートメントを実行すると、「'SQL_CALC_FOUND_ROWS' の使用/配置が正しくありません」エラーが発行されます。これを何度もGoogleで調べたり、ここで関連メッセージを読んだりしても無駄です。とても単純なことかもしれませんが、私はそれを理解することができません。

役に立ちましたか?

解決

SQL_CALC_FOUND_ROWS をクエリで使用して FOUND_ROWS() に単一の数値を返すことができるため、このエラーが発生します。

これを行うとバックカウントを取得できます。

SELECT 'table1' AS tablename, COUNT(1) AS rowcount FROM table1 WHERE id > 1
UNION ALL
SELECT 'table2' AS tablename, COUNT(1) AS rowcount FROM table2 WHERE id > 1
...
SELECT 'tableN' AS tablename, COUNT(1) AS rowcount FROM tableN WHERE id > 1

それが役に立てば。

テーブルからカウントを含む行を返したい場合は、それを変更します。

SELECT field1, field2, (SELECT COUNT(1) FROM table1 WHERE id > 1000) FROM table1 WHERE id > 1000
UNION ALL
SELECT field1, field2, (SELECT COUNT(1) FROM table2 WHERE id > 1000) FROM table2 WHERE id > 1000
...
SELECT field1, field2, (SELECT COUNT(1) FROM tableN WHERE id > 1000) FROM tableN WHERE id > 1000

あなたの質問からすると、あなたが達成しようとしていることは明確ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top