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 列不为空。我究竟做错了什么?更新:寻找使用 PHP 的解决方案,我需要 col1 和 col2 值。

我还想学习,使用 NULL 值是这个例子的最佳实践吗?

4

3 回答 3

3

我在您的问题中看到了一系列问题:

我想使用 col1 数据如果 col2 不为空,如果是我将使用 col2 数据。

我假设您的意思是如果 col1 为 null 则使用 col2 数据,否则使用 col1。在这种情况下,你的 php.ini 有问题。不确定您是否提供了示例代码,但您没有将任何变量传递给函数,也没有在函数内将它们声明为全局变量。

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 回答
3

你应该看看在你的 sql 查询中使用COALESCE(),只带回你想要显示的数据。这将完全阻止您需要此功能/逻辑。

SELECT Id, COALESCE(col1, col2)
FROM yourTable

此外,对于 PHP,您可以考虑更改if(is_null($col1) == true)

if(is_null($col1))改为使用。它更小、更简洁,并且消除了使用多少个=标志和大小写的问题True

更新答案以包括 Andreas 提出的选项:

SELECT Id, col1, col2
   , IFNULL(col1, col2) AS NotNullColumn
FROM yourTable
于 2011-11-20T23:31:44.967 回答
1

查看IFNULL,如果它不为空,它会给你 col1 。否则它会给你col2。

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