1

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' の使用法/配置が正しくありません」というエラーが発行されます。これをたくさんグーグルで検索し、ここで関連するメッセージを読んでください。本当に単純なことかもしれませんが、私はそれを理解することができません。

4

1 に答える 1

0

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

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

于 2009-08-23T10:29:43.283 に答える