За последние 24 часа нас посетили 119933 программиста и 2992 робота. Сейчас ищут 1335 программистов ...

Подскажите как исключить из запроса NULL

Тема в разделе "PHP для новичков", создана пользователем marsik, 23 дек 2010.

  1. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Код (Text):
    1. SELECT * FROM table WHERE `title` LIKE '%квартира%' OR `description` LIKE '%квартира%' AND price <=1000000
    пробовал добавлять разные конструкции для исключения NULL, не помогает, у price дефолтное значение NULL, подскажите с запросом как исключить не прибегая к изменению дефолтного значения price
     
  2. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ну дак и напиши where price not null
     
  3. Devzirom

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

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
  4. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    ну дак пробовал и IS NOT NULL и BETWEEN
     
  5. Devzirom

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

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    А вы уверены, что у вас там NULL, а не ""
     
  6. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    в дефолте NULL, но в полях и такое тоже есть но оно исключается через AND price != ''

    Код (Text):
    1. SELECT * FROM table WHERE `title` LIKE '%квартира%' OR `description` LIKE '%квартира%' AND price <=1000000 AND price != '' AND `price` IS NOT NULL
    все равно выходят с NULL
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    describe сделай
     
  8. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Null - YES
    Default - NULL
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Скобки в условии расставьте.
     
  10. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    вот так получилось убить NULL
    Код (Text):
    1. SELECT * FROM table WHERE `title` LIKE '%квартира%' AND `description` LIKE '%квартира%' AND NOT(price IS NULL OR price = '')
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Выражение:
    [sql]WHERE `title` LIKE '%квартира%' OR `description` LIKE '%квартира%' AND price <=1000000 AND price != '' AND `price` IS NOT NULL
    [/sql]
    не равно выражению:
    [sql]WHERE `title` LIKE '%квартира%' AND `description` LIKE '%квартира%' AND NOT(price IS NULL OR price = '')[/sql]
    ибо последнее выражение равно:
    [sql]WHERE `title` LIKE '%квартира%' AND `description` LIKE '%квартира%' AND price IS NOT NULL and price <> ''[/sql]
     
  12. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Тогда правильнее наверное:
    Код (Text):
    1. SELECT * FROM table WHERE `title` LIKE '%квартира%' AND `description` LIKE '%квартира%'  AND price >=1000000 AND NOT(price= '')
    NOT вроде как исключает значения NULL или можно получше сделать?
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    С какой стати?

    Вы сначала определитесь:
    [sql]LIKE '%квартира%' OR `description` LIKE '%квартира%'[/sql]
    или
    [sql]LIKE '%квартира%' and `description` LIKE '%квартира%'[/sql]
    а потом уже двигайтесь дальше
     
  14. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
     
  15. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
     
  16. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Если нам нужно найти по слову %квартира% в полях `title` или в `description` ценой до 10000 то так правильно:
    Код (Text):
    1. SELECT * FROM table WHERE (`title` LIKE '%квартира%' OR `description` LIKE '%квартира%') AND (price IS NOT NULL AND price != '' AND price <=10000)
    ?
     
  17. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Проверьте.
     
  18. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Вроде работает, но выводит цены некоторые с пробелами где юзеры запостили не правильно а поле там по неграмотности было выставлено не INT а VARCHAR, сейчас выставить поле в INT, сделать обработчик на php что бы удалил пробелы или они сами при INT удалятся?
     
  19. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Понятия не имею.
    MSSQL попытался бы преобразовать и при невозможности выдал бы ошибку и не стал бы менять тип поля. Причем '123' он еще преобразует, а вот '123 ' уже вряд ли.
    Что сделает MySQL не знаю, но думаю привести к численному формату стоит. Только наверно не к INT, а какому нибудь decimal(11,2)
     
  20. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Volt(220) cпасибо за консультацию