2017-10-23 9 views
1

私はMySQLとPHPで少し問題を解決しました。結果が連続しているかどうかを確認してください

のは、私はこの行を持つテーブルを得たと仮定しましょう:

  • ID(int
  • 値(boolean
  • 日(datetime

今、私がチェックしたいです連続して値がfalseの5つ以上のエントリがある場合。

例:

id | value | date 
1 - true - 01.01.1970 
2 - false - 02.01.1970 
3 - false - 03.01.1970 
4 - false - 04.01.1970 
5 - false - 05.01.1970 
6 - false - 06.01.1970 

ここでは、継続的にfalseある5つの項目を持っています。だから私のスクリプトはtrueを返すべきです(はい、連続してfalseの5つ以上のエントリがあります)。

この例では、falseを返すべきである:

id | value | date 
1 - false - 01.01.1970 
2 - false - 02.01.1970 
3 - true - 03.01.1970 
4 - false - 04.01.1970 
5 - true - 05.01.1970 
6 - false - 06.01.1970 

このfalseを返すべきである(NO、5つの以上のエントリ連続falseは存在しません)。

これを解決する方法はありますか?

+0

どのように 'select count(id)where value = 'false''ですか? if文を使用して条件を処理しますか? –

+0

@MasivuyeCokileそれは連続的に値falseでなければなりません。あなたの提案では達成できないかもしれません。 – Pratik

+1

質問タイトルは誤解を招きます。質問に関連するように更新できますか?そしてタイトルでテクノロジーを指定する必要はありません。そのためのタグがあります。 – Reniuz

答えて

1

はい、それは、ループなどを使用することで可能です:

$array = [[1, true], [1, false], [1, false],[1, false],[1, false],[1, false]]; // Your array 

$counter = 0; 
$hasFoundFiveContinuesFalse = false; 
foreach($array as $item) { 
    if($item[1] == false) { 
     $counter++; 
    } else { 
     $counter = 0; 
    } 

    if($counter >= 5) { 
     $hasFoundFiveContinuesFalse = true; // if we have found 5 times false then break the loop and set hasFoundFiveContinuesFalse to true 
     break; 
    } 
} 

var_dump($hasFoundFiveContinuesFalse); 

は、これは完璧な方法ではないかもしれませんが、それは動作するはずです。

+1

日付の列。日付欄 –

+0

のように特定の日付をチェックしたいのですか? –

+1

SQLクエリで日付順に並べ替えることができるので、常に最新のXエントリがあります。これはこれによって処理されます。 – SPQRInc

関連する問題