電子書籍の厳選無料作品が豊富!

人口($pop)と面積($area)から人口密度を計算する際、
MySQLから取り出したデータに、ゼロやNULLが混在しているので、
(1) 分母や分子がゼロの場合
(2) 分母や分子がNULLの場合
は、割り算しないようにしたいのですが、

単純に以下のようにすると、
(1) はN/Aと表示されますが、(2)ではN/Aが表示されません。
NULLもはねるようにするにはどのように記述したらよいでしょうか。

if ($pop > 0 and $area > 0){
$density = $pop / $area ;
} else {
$density = "N/A";
}

A 回答 (3件)

「===」という演算子で、値と同時に型も比較してくれますので、



$pop = null;
$area = 50;
if($pop !== null and $area !== null and $pop > 0 and $area > 0)
{
}
else
{
}
としてあげれば、希望の動作は満たすと思います。
ただ、このやり方が正解なのかどうかは自分にはわかりません。。。

参考URL:http://jp.php.net/manual/ja/language.operators.c …
    • good
    • 0
この回答へのお礼

御礼遅くなって失礼しました。
(作業がここまで到達せず。。。)

まさにご回答のような方法をお尋ねした次第ですが
残念ながら希望通りにはなりませんでした。

別の何かが誤っていたのでしょうかね・・
とにかく、貴重なアドバイスありがとうございました。

お礼日時:2005/10/12 10:54

NULLの検査にはis_nullが使えます

    • good
    • 0
この回答へのお礼

御礼遅くなって失礼しました。
(作業がここまで到達せず。。。)

貴重なアドバイスありがとうございました。
is_nullについて調べてみます。

お礼日時:2005/10/12 10:54

MySQLに発行するSELECT文で、NULLだったら、0を返すようにするか、$density をSQLで計算することをお勧めします。



SELECT IFNULL(area, 0) AS area, IFNULL(pop, 0) AS pop ...
みたいな感じですかね。
または、
SELECT CASE WHEN area IS NULL OR pop IS NULL OR area = 0 OR pop = 0 THEN 'N/A' ELSE pop/area END AS density ...

標準SQLですと、CASE式の返す値は型が同じじゃないといけないんですが・・・
MySQLだと通っちゃいます。
    • good
    • 0
この回答へのお礼

御礼遅くなって失礼しました。
(作業がここまで到達せず。。。)

今回は諸事情で使うことができませんが、
SQL側でという発想はありませんでした。

参考にさせていただきます。

お礼日時:2005/10/12 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!