2017-07-03 8 views
1

以下はPHPで実行される2つのMySqlクエリです。Foreachで空カウント前の結果を空の場合に使用

一見すると、彼らは私が望むものを達成します。これは、チーム内のユーザーの数を数え、次にLocationsの表示回数をカウントし、それらをグループ化して、変数countcountとして使用するための最大カウントを返します。

ただし、ユーザーが存在しないため、場所がない場合は、以前のループの結果が返されます。 PhpMyAdminでクエリを実行すると、結果は返されず/空のセットになります。

それは以前、その結果としての位置数をループ使用します。その空/ nullの場合、あなたはまた、何らかの理由で。見ることができるように私は「!=」あなたが見ることができるように(NULLIFを試みたが、場所ました。

/** other table select --working loop-- */ 
/** irrelevant code here */ 

    foreach($rows as $result) { 

    $result = $conn->prepare("SELECT location, COUNT(NULLIF(TRIM(location), '')) as flagnum FROM users WHERE team_name='$teamname' AND location !='' GROUP BY location ORDER BY flagnum DESC LIMIT 1"); 
    $result->execute(); 
    $rows = $result->fetchAll(); 
    foreach($rows as $result): 
    $flagmajority = $result['location']; 
    $flagcount = $result['flagnum']; 
    endforeach; 

    $result = $conn->prepare("SELECT team_name, COUNT(NULLIF(TRIM(team_name), '')) as playnum FROM users WHERE team_name='$teamname' AND team_name !='' GROUP BY team_name ORDER BY playnum DESC LIMIT 1"); 
    $result->execute(); 
    $rows = $result->fetchAll(); 
    foreach($rows as $result): 
    $playercount = $result['playnum']; 
    endforeach; 


    $flagpercent = ($flagcount/$playercount) * 100; 
    $roundedpercent = round($flagpercent); 

    echo $flagcount; 

} 

答えて

0

は、ループ内の$ flagcountを初期化してみ

このように:。

foreach($rows as $result) { 

    $flagcount = 0; 
    ... 
+0

私はそのアイデアが好き、私は仕事ができることhopefulyだったが、それは、私は怖いしません 。$ flagcount = 0を設定している場合、その直後に$ flagcount = $ result ['flagnum']を設定します。とにかくオーバーライドされませんか? – MikeXero

+0

はい、しかし、ポイントは、クエリ内に結果がないために内部ループが起こらない場合、それを上書きしないことです。初期化しないと、次回のループ実行時に前のループの値が使用されます。 – TBowman

+0

作品!私はあなたが外側のループを意味するのか分からなかった、私はそれを考えなかった。私のためにこれを働かせてくれてありがとう!私はループがヘッドスピンを見つける。 – MikeXero

関連する問題