Проверка значений MySQL NULL с помощью PHP

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

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 лучшей практикой для этого примера?


person tuze    schedule 20.11.2011    source источник
comment
Да, вы должны использовать значения NULL в таблицах sql, когда для этой строки/записи/объекта нет данных.   -  person Adam Wenger    schedule 21.11.2011
comment
Можете ли вы проверить, что для первого прохода $col1 имеет данные, а не NULL на самом деле?   -  person Adam Wenger    schedule 21.11.2011
comment
Можете ли вы показать нам код, который вызывает эти функции, пожалуйста?   -  person Adam Wenger    schedule 21.11.2011
comment
Было бы здорово попасть в HALL OF SHAME! Я вызываю функцию с чем-то ($col1,$cok2) почти 4 часа.   -  person tuze    schedule 21.11.2011


Ответы (3)


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

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

Я предполагаю, что вы имеете в виду, что хотите использовать данные col2, если col1 IS null, в противном случае используйте col1. В этом случае у вас есть проблемы в вашем php. Не уверен, предоставили ли вы пример кода или нет, но вы не передаете какие-либо переменные в функцию и не объявляете их глобальными внутри func.

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');

Это дает вам «а» в обоих случаях

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

Это дает вам «б»

person Alexey Gerasimov    schedule 20.11.2011
comment
Мне действительно нужна серьезная помощь, задавая вопросы. Извините, конечно, я передаю значения своим функциям. - person tuze; 21.11.2011
comment
что тогда не работает? Я только что запустил код, который указал выше, и он отлично работает. Если col1 не равно null , возьмите col1, иначе возьмите col2. - person Alexey Gerasimov; 21.11.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
person Adam Wenger    schedule 20.11.2011
comment
Спасибо за ваш ответ, и я знаю о функции COALESCE. Мне нужны столбцы col1 и col2. Итак, ищем решение с PHP. - person tuze; 21.11.2011
comment
Тогда SELECT col1, col2, IFNULL(col1, col2) as theOneThatIsntNull FROM <table> может вам помочь. Поместите логику туда, где она должна быть, в данном случае в базе данных. - person Andreas Wederbrand; 21.11.2011
comment
Я действительно должен спрыгнуть с моста! Я вызываю функцию с чем-то ($col1,$cok2) почти 4 часа. Извините, что отнял у вас время... - person tuze; 21.11.2011

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

SELECT id, IFNULL(col1, col2) FROM <table>;
person Andreas Wederbrand    schedule 20.11.2011