За последние 24 часа нас посетили 18786 программистов и 1895 роботов. Сейчас ищут 845 программистов ...

NULL

Тема в разделе "PostgreSQL", создана пользователем Slavka, 14 окт 2013.

  1. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    Наткнулся на них не знаю как забороть
    есть некая выборка

    select id,column1, column2 from table

    коегде значения column1 и column2 не вбиты и пользователю тупо вываливается null в ответ.
    Естественно пользователь пугается и говорит что это за текст такой переодически когда там нет данных.

    как разом заменить null на '' а не заниматься вот таким ПИП

    select id,
    COALESCE (column1,''),
    COALESCE (column2,'')
    from table

    колонок естесно больше =)
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    непонятно как твой пользователь ухитряется получать буквально "null", вроде бы пыха везде изображает его пустой строкой...

    рецепт:
    Код (Text):
    1. update xxx set col1='' where col1 is null;
    2. alter table xxx modify col1 varchar(100) not null default '';
     
  3. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    очень просто я с postgres json гоню он там их и видит - вот что json гоняет
    [{"ARXNOM_HOB":"013581","S_HOB":"3393.2","XAR_HOB":"отдельностоящее здание","RESH_HOB":"","DATE_RESH_HOB":null,"AKT_HOB":null,"DATE_AKT_HOB":null,"PRAVO_HOB":null,"DATE_PRAVO_HOB":null}]

    а потом я просто циклом раскладываю все на морде
    $.getJSON( "link.php", function(data){
    for (var key in data[0]) {
    var val = data[0][key];
    $("#"+key).text(val);
    }
    });

    и соответственно при выводе на экран - вижу Вот такое чудо
    Акт: № null от null
    Право: № null от null


    то что данных нету это уже не мои проблемы - вобьют будет все красиво.

    вариант по изменению данных не годится ((
    я с руководством поговорил - не нравится даже если сделать разом на всю базу вывод вместо null пустоты.

    я пока нашел вот эту команду но как я понял она работает только из консоли и сразу все базы и все выводы .. а как такое сделать перед конкретным селектом пока не знаю

    \pset null ' ***null*** '

    использовать пока не решаюсь.

    Добавлено спустя 14 минут 31 секунду:
    не имея пока другого решения плюнул и сделал на стороне клиента проверку на null вот так

    $.getJSON( "link.php", function(data){
    for (var key in data[0]) {
    var val = data[0][key];
    if (val == null) {val='';}
    $("#"+key).text(val);
    }
    });

    если есть какие еще мысли жду с нетерпением
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    не стоит перекладывать работу на JS. это костыли!
    ты вообще обратил внимание на update и alter table? если этот вариант не подходит (а почему, блин?!), то можно
    в отдающем php-скрипте между pg_fetch_row и json_encode добавить array_map() и там конвертировать null в ''.
     
  5. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    обратил - к постгришным базам цепляется еще аксес - а там какие то фичи накручены ( почему я собственно и делаю веб морду- мы хотим с аксеса уйти)
    сейчас попробую ваш вариант
     
  6. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    1. а почему не стоит отдавать это клиенту ? формы не очень большие .. да даже если где то сбойнет ну подумаеш null выскочит
    2. толи лыжи не едут то ли .. куку
    делаю так
    array_map("self::test_null", $data)

    вот функция
    function test_null($n){
    die ("приходит:".$n);
    if ($n=='null'){ return '';}
    else {return $n;}
    }

    воткнул дай изза того что не хотело работать ни как 'null' ни как NULL ни как is_null($n)
    от увиденного был шокирован

    приходит:Array


    вот так выглядит $data

    $data = array();
    While ($row_tmp = pg_fetch_array($return) ) {

    $data[$i]['ARXNOM_HOB']=$row_tmp['ARXNOM'];
    $data[$i]['S_HOB']=$row_tmp['S'];
    ...
    $++;
    }
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    WTF?

    Добавлено спустя 2 минуты 24 секунды:
    я понял, тебе надо не весь $data подсовывать в array_map, а $row_tmp, прямо внутри цикла - тогда всё получится

    p.s. die ("приходит:".$n); я бы заменил на die ("приходит:".var_export($n, true));

    Добавлено спустя 1 минуту 6 секунд:
    "self::test_null" -- оно точно статика? не ты ли намедни мучался со статика/нестатика?

    array($this, 'test_null')

    или лямда-функцию делай прямо по месту. будет напоминать твой любимый js )))
     
  8. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    не забивай голову - не весь код копировал =) эту строчку бил руками i не пропечаталась ((

    ага фокус удался
    теперь точно
    хотя если честно я пока никак не прочитаю в разница между динамикой и статикой все никак глаза не дойдут.

    только я так и не понял почему обрабатывать лучше на сервере, а не на клиенте.
    сейчас я увидел вот что - приходится использовать дополнительную функцию, приходится пересматривать и хранить в памяти массив, при чем его приходится дублировать.
    вот как я сейчас сделал
    While ($row_tmp1 = pg_fetch_array($return) ) {
    $row_tmp= array_map("self::test_null", $row_tmp1) ;
    $data[$i]['ARXNOM_HOB']=$row_tmp['ARXNOM'];
    ..
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    не понимаю твоей тревоги. ты получил немного новых знаний и решил проблему. что не так, хочешь поговорить об этом? )))

    static переменные принадлежат классу а не объекту. то есть существует только один экземпляр. у этого факта есть богатые следствия, постепенно освоиш.
     
  10. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    о.. не знал что она одна и все.
    ладно оставляю как насоветовал - потом буду разбираться.

    Спасибо огромное за подсказки и рекомендации.