0

私はこのmysqlクエリを持っています:

SELECT Files.GUID, Files.Name, Files.Type, Files.Visibility, Files.CreationDate, Files.OwnerUser, Date, BackupsCount
FROM Files
  LEFT JOIN (
    SELECT FileGUID, Date, COUNT(*) AS BackupsCount
    FROM Versions
    GROUP BY FileGUID
  ) Versions ON Files.GUID = Versions.FileGUID
WHERE Files.ParentFolder = '96251A8B-B2A8-416B-92D7-3509E6A645C7'
ORDER BY Files.Type DESC, CreationDate ASC
LIMIT 0, 50

LIMIT ディレクティブが存在しない場合に、このクエリが返すレコードの数を知りたいのですが、ググったところSELECT SQL_CALC_FOUND_ROWS、追加する必要があることがわかりました。SELECT FOUND_ROWS();

私の問題は次のとおりです:私はそれを動作させることができませんでした:

SELECT SQL_CALC_FOUND_ROWS * FROM (
SELECT Files.GUID, Files.Name, Files.Type, Files.Visibility, Files.CreationDate, Files.OwnerUser, Date, BackupsCount
FROM Files
  LEFT JOIN (
    SELECT FileGUID, Date, COUNT(*) AS BackupsCount
    FROM Versions
    GROUP BY FileGUID
  ) Versions ON Files.GUID = Versions.FileGUID
WHERE Files.ParentFolder = '96251A8B-B2A8-416B-92D7-3509E6A645C7'
ORDER BY Files.Type DESC, CreationDate ASC
LIMIT 0, 50)

-- Find total rows
SELECT FOUND_ROWS()

これが良い考えであると仮定すると (つまり、1 つのクエリと 2 つの個別のクエリを実行することを意味します)、このクエリを使用するにはどうすればよいでしょうか?FOUND_ROWS()

4

3 に答える 3

1

考え方は正しく、2番目のクエリはほぼ瞬時に実行されます。ただし、キーワードの後に​​キーワードを追加する必要がありますSELECT。これ以上は追加できません。

SELECT Files.GUID, Files.Name, Files.Type, ...

になります

SELECT SQL_CALC_FOUND_ROWS Files.GUID, Files.Name, Files.Type, ...

次に、見つかった行の数が入力され、それを回復できるようになります。

単一の取得クエリを実行したいが、複数のクエリを実行できる場合は、これを実行できます(2つのクエリです)。

SELECT COUNT(*) INTO @FOUNDROWS FROM ( YOUR_QUERY_WITHOUT_SELECT ) AS orig;

@FOUNDROWS as foundrowsフィールドに追加して、取得クエリを変更します。

SELECT ...YOUR FIELDS..., @FOUNDROWS AS foundrows FROM...

最後に、2つのクエリを含む単一のクエリとしてJOINを実行できます。

SELECT ALL_YOUR_FIELDS, counter.FOUND_ROW_NUMBER FROM
( YOUR_QUERY_WITH_LIMIT ) AS limited
JOIN ( SELECT COUNT(*) AS FOUND_ROW_NUMBER FROM YOUR_QUERY ) AS counter;
于 2012-10-16T13:41:16.073 に答える
1

クエリは次のようになります。

SELECT SQL_CALC_FOUND_ROWS Files.GUID, Files.Name, Files.Type, Files.Visibility, Files.CreationDate, Files.OwnerUser, Date, BackupsCount
FROM Files
  LEFT JOIN (
    SELECT FileGUID, Date, COUNT(*) AS BackupsCount
    FROM Versions
    GROUP BY FileGUID
  ) Versions ON Files.GUID = Versions.FileGUID
WHERE Files.ParentFolder = '96251A8B-B2A8-416B-92D7-3509E6A645C7'
ORDER BY Files.Type DESC, CreationDate ASC
LIMIT 0, 50
于 2012-10-16T13:37:11.977 に答える