2016-08-21 1 views
0

PHPでいくつかのファイルを処理しており、MySQLを使用して結果を保存しています。ここでは、私のテーブルがどのように見えるかであるように:2つの列の減算の合計が値に等しい行を制限する

tblConverts

私はそれがポイントに到達するまで「待機中」とマークレコードの上で動作するように私のバッチスクリプトを作りたい
ID ACCESS_KEY STATUS  TOTAL_PAGES PROCESSED_PAGES 
---- ------------ ----------- ------------- ----------------- 
    1 upYP5RbNqQ COMPLETED   10    10 
    2 IeH02qBAtV WAITING    32    18 
    3 Di5sCWxA2p REJECTED    28     0 
    4 Aft54Xhr3f WAITING    40     0 
    5 TzU1VMoeQF WAITING    30     0 

どこ二つの列(TOTAL_PAGESの合計 - PROCESSED_PAGES)は、例えば100に等しい。

私はこれを実装する方法を照会することです:

SELECT * FROM tblConverts WHERE status = 'WAITING' AND TOTAL_PAGES > PROCESSED_PAGES LIMIT 500

そしてPHPスクリプトに私がループを作り、カウンタが100に達した。しかしSQLを組み合わせることにより、この方法を使用してPHPになるまで行を引きます良い考えではありません。この関数を単一のSQLクエリとして実装するにはどうすればよいですか?

UPDATE

我々は、第二の第四及び第五列にうまくいくように、第一及び第三の行が条件に合致していない、実行あたり20ページ(全行ない各行)を想像。 2列目からは14ページ(32〜18)です。行#2の残りのページは20未満であるため、次のページを検索する必要があります。次のページ(#4)は40ページあり、残りのページ(14 + 40)の合計は20よりも大きいので、ここで停止して行(#2と#4)を返す必要があります。

+0

まあ、あなたは 'TOTAL_PAGES> PROCESSED_PAGES'で最初のクエリを書いています。 'TOTAL PAGES - PROCESSED_PAGES = 100'(しかし、実際には'> = 'や' <= 'がおそらく良い選択です)。あなたの質問を変更する必要はありますか? – Chris

+0

@Chris私は私の質問を更新しました。私が説明できない場合は教えてください。 – Bablod

答えて

1

これを試してみて、同じことをお探しならお知らせください。

注:あなたの質問で言及しているように、20が限界です。あなたの要件に応じて変更することができます。

SELECT 
    * 
FROM 
    tblConverts 
WHERE 
    ID IN (
     SELECT 
      m1.ID 
     FROM 
      tblConverts m1 
     LEFT JOIN tblConverts m2 ON m1.ID >= m2.ID 
     WHERE 
      m1. STATUS = 'WAITING' 
     AND m2. STATUS = 'WAITING' 
     GROUP BY 
      m1.ID 
     HAVING 
      SUM(
       m2.TOTAL_PAGES - m2.PROCESSED_PAGES 
      ) - SUM(m1.TOTAL_PAGES)/COUNT(m1.TOTAL_PAGES) < 20 
    ) 

+0

ありがとう、これは私が欲しいものです。ちょうど質問、私は複雑なSQLクエリを理解していない、なぜあなたはm1.statusとm2.statusの両方をチェックしたのですか? m1.idの意味は何ですか? m1を最初のSELECTの結果に向けていますか? – Bablod

+0

遅く返事を申し訳ありません。このクエリの基本的なログインは '> ='列 'id'で結合されたままになっていますので、両方のエイリアスに対して 'ステータス'条件 '待機'を設定する必要があります。私は同じテーブルの2つのエイリアスを作成しました。(私たちは自己結合のように)m1.idはエイリアスm1テーブルのカラムです。私はm1テーブルにgroup byを実装しているので、select文にm1.idがなければなりません。 – chirag

関連する問題