2

これが私のテーブルの様子です。

id col1 col2  
---------------
1  a     x
2  NULL  y
3  NULL  z
4  NULL  t

col1のデフォルト値はNULL。です。

col1データを使用したいcol1がnullでない場合は、col2データを使用します。

function something($col1,$col2)
{
   if(is_null($col1) == true)
      $var = $col2
   else
      $var = $col1

   return $var;
}

function something2($col1,$col2)
{
   if($col1 === NULL)
      $var = $col2
   else
      $var = $col1

   return $var;
}

これが私の問題です。これらの関数は両方とも$col2値を返します。しかし、最初の行でわかるように、col2列はnullではありません。私は何が間違っているのですか?更新:PHPを使用したソリューションを探していますが、col1とcol2の両方の値が必要です。

また、学びたいのですが、この例ではNULL値を使用することがベストプラクティスですか?

4

3 に答える 3

3

SQLクエリでCOALESCE()を使用することを検討し、表示するデータのみを戻す必要があります。これにより、この関数/ロジックがまったく必要なくなります。

SELECT Id, COALESCE(col1, col2)
FROM yourTable

また、PHPの場合は、変更を検討できますif(is_null($col1) == true)

代わりに使用しif(is_null($col1))ます。それはより小さく、より簡潔であり、=使用する標識の数とケーシングの問題を排除しますTrue

アンドレアスによって提案されたオプションを含めるために回答を更新する:

SELECT Id, col1, col2
   , IFNULL(col1, col2) AS NotNullColumn
FROM yourTable
于 2011-11-20T23:31:44.967 に答える
3

あなたの質問にはたくさんの問題があります:

col1データを使用したいcol2がnullでない場合は、col2データを使用します。

col1がnullの場合はcol2データを使用し、それ以外の場合はcol1を使用することを意味していると思います。その場合、PHPに問題があります。サンプルコードを提供したかどうかはわかりませんが、関数に変数を渡したり、関数内でグローバルとして宣言したりしていません。

function something($col1, $col2){

  if(is_null($col1) == true)
        $var = $col2;
  else
        $var = $col1;

  return $var;
}

function something2($col1, $col2){

  if($col1 === NULL)
        $var = $col2;
  else
        $var = $col1;

  return $var;
}

echo something('a','x');
echo something2('a','x');

これにより、どちらの場合も「a」が得られます

echo something(NULL,'b');
echo something2(NULL,'b');

これにより、「b」が得られます

于 2011-11-20T23:39:50.927 に答える
1

IFNULLを確認してください。nullでない場合はcol1が表示されます。それ以外の場合は、col2が表示されます。

SELECT id, IFNULL(col1, col2) FROM <table>;
于 2011-11-20T23:37:38.037 に答える