1

特定の間隔番号で結果をフィルタリングするためのMySQLスクリプトの解決策はありますか?

たとえば、データベースに100,000のレコードがあり、レコード番号1000、2000、3000などのみを取得したい場合(1000ずつ)。

結果全体(たとえば100,000)を取得し、次のような構文を使用することで、サーバー側のスクリプトでこれを行うことができます。

for($i=0, $i <= 100,000, $i = $i+1000) $filterResult[] = $record[$i];

ただし、ご覧のとおり、最初に100,000レコードを生成する必要があるため、システムにストレスがかかります。

データベーススクリプトから完了できるソリューションはありますか?where句の条件に基づく結果として、主キーが1〜100,000で始まらない場合があることに注意してください。

あなたの助けは本当にありがたいです。

4

1 に答える 1

5

できるよ:

SELECT *
FROM   tbl
WHERE  id % 1000 = 0

しかし、主キーの値ではなく、結果セットの行のランキングに依存するように思われます。

その場合、次のことができます。

SELECT *
FROM   (
       SELECT     *, @rn:=@rn+1 AS rank
       FROM       tbl
       CROSS JOIN (SELECT @rn:=0) var_init
       WHERE      column1 = value AND
                  column2 = value
       ) a
WHERE  a.rank % 1000 = 0

column1 = value AND column2 = valueクエリで実行しているフィルタリングのプレースホルダーはどこにありますか。

于 2012-08-17T00:58:17.210 に答える