Проверка значений MySQL NULL с помощью PHP - PullRequest
2 голосов
/ 21 ноября 2011

Вот так выглядит мой стол ..

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

col1 имеет значение по умолчанию NULL.

Я хочу использовать данные col1. Если col1 не нуль, в противном случае используйте данные 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-значений наилучшей практикой для этого примера?

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Я вижу множество проблем в вашем вопросе:

Я хочу использовать данные col1. Если col2 не нуль, Если это, я буду использовать данные col2.

Я предполагаю, что вы хотите использовать данные col2, если col1 равно нулю, в противном случае используйте 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'

3 голосов
/ 21 ноября 2011

Вы должны использовать COALESCE () в своем sql-запросе, возвращать только те данные, которые вы хотите отобразить.Это не позволит вам вообще использовать эту функцию / логику.

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
1 голос
/ 21 ноября 2011

Проверьте IFNULL , это даст вам col1, если это не ноль.Иначе это даст вам col2.

SELECT id, IFNULL(col1, col2) FROM <table>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...