-3

このコードの助けが必要です。空のヒット データに文字列「0」を表示するだけでよいので、1 日目には 3 件のヒットがあり、2 日目には 0 件のヒットがあることを念頭に置いています。 0 助けてください。ありがとうございました

days || Hits
 1 - | | |- 3
 2 - | | |- 
 3 - | | |-
 4 - | | |- 
 5 - | | |- 5

コードは次のとおりです。

$year = date("Y");
$month = $_POST['selected_date'];
if(!isset($month) or $_POST['selected_date'] == 0)
{
  $month = date("n");
}
 $num = cal_days_in_month(CAL_GREGORIAN, $month, $year);

    for($i = 1; $i <= $num; $i++)
    { 
     echo "<p >$i - ";

     $query = mysql_query("SELECT DATE_FORMAT(`LookbookLogDate`, '%m') as 'month', DATE_FORMAT(`LookbookLogDate`, '%d') as 'day',
COUNT(`LookbookLogID`) as 'total'
FROM LookbookLog
where Lookbook_LookbookID = $LookbookID and LookbookLogDate like '%2013-03%'
GROUP BY DATE_FORMAT(`LookbookLogDate`, '%m'), DATE_FORMAT(`LookbookLogDate`, '%d')");
        while($row = mysql_fetch_array($query))
        {
               $day = $row['day'];

           $total = $row['total'];

             if($day == $i) echo $total."</p>";
        }


    }
4

5 に答える 5

1

適切なソリューションを実現するユニバーサル SQL 関数があるため、データベースからゼロを取得します。

SELECT
DATE_FORMAT(`LookbookLogDate`, '%m') as 'month',
DATE_FORMAT(`LookbookLogDate`, '%d') as 'day',
COALESCE(COUNT(`LookbookLogID`),0) as 'total'
FROM LookbookLog
{snip}

これは、COUNT() の結果に値がない場合、代わりに 0 を選択することを意味します。その後、特にアプリケーションの NULL ケースをチェックしなくても、echo ステートメントは正常に機能します。

于 2013-03-26T16:11:50.683 に答える
0

問題は、COUNT(...)結果がない場合に 0 ではなく NULL を返すことです。これは、出力時におそらく PHP が空の文字列として処理します。COALESCESQLに式を追加することで修正できます(私の意見では、これがより良い解決策です):

SELECT ... COALESCE(COUNT(`LookbookLogID`), 0) ...

または、PHP で確認します。

echo $row['total'] ? $row['total'] : 0;

または複数行のバージョン:

if($row['total'])
    echo $row['total'];
else
    echo 0;

empty()PHP の型キャストでは null、空の文字列、および 0 が false として扱われるため、比較や呼び出しを行う必要がないことに注意してください。

于 2013-03-26T16:09:50.857 に答える
0

empty() 関数を使用してみてください。empty() 関数は、多くのことを真の値と見なします。これらの値のリストについては、http://php.net/manual/en/function.empty.phpを参照してください。

$total = (empty($row['total'])?0:$row['total']);

アップデート:

探している結果を得るには、以下を実行するだけで済みます。

$total = ($row['total']?$row['total']:0);
于 2013-03-26T16:08:13.983 に答える
0

実行echo 0すると画面に 0 が表示されますが、実行しecho falseても表示されません。ここでの問題は、0を表示することではなく、 $totalが保持する値です。クエリが空のセットを返す場合、 or の$row['total']いずれfalsenullであり、したがってecho falseorecho nullは何も表示しません。

クエリが何かを返し、それ$totalが目的の値を保持していることを確認var_dumpして、その型を確認します。

次のようなものが必要です

   $total = ! empty($row['total']) ? $row['total'] : 0;
于 2013-03-26T16:08:19.630 に答える
0

編集:フィールドを にしintて、デフォルト値を に設定してみません0か?

テーブルを作成する方法のコードは表示されませんが、次のようになります。

$total = ((!$row['total'] ? 0 : $row['total']);

このコードは基本的に、「$row['total']が空白の場合はゼロにします。それ以外の場合は、$total返されたものと等しくします。

于 2013-03-26T16:08:56.790 に答える