Проверка поля на пустоту mysql

tenaro

Новичок
Проверка поля на пустоту mysql

Есть ли функция?
Или надо делать отдельное поле с флагом?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что значит на пустоту?
 

tenaro

Новичок
Грубо говоря есть в бд много юзеров, с полями: имя, пароль, возраст итд, и если поле, к примеру возраст пустое (не указали при регистрации например), должна вылезать ссылка, пройдя по которой можно его указать.

Так вот хочу понять если ли в mysql готовое решение.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tenaro
есть, надо написать запрос, который проверит нужное поле:

select ... from ... where fiels != ''
 

dimagolov

Новичок
c0dex, а с чем сравнивать будешь?

tenaro, в SQL есть такое понятие, "нет значения", которое обозначается NULL. оно очень хитрое. потому что если в переменной/поле field у наз записано конкретное не-NULL значение, то любое сравнение field с NULL будет ложным. Иными словани NULL = 1 это ложь и NULL <> 1 тоже ложь. Для проверки поля на NULL есть специальный оператор: IS NULL, IS NOT NULL
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
dimagolov
сравнивать с пустой строкой
 

dimagolov

Новичок
c0dex, то есть если дебильно хранить возраст в строке, то его отсутствие пустой строкой? дебильно потому что его нельзя будет сравнивать < > да и с индексами нужно будет аккуратно себя вести.

кстати, и само по себе поле "возраст" это глупо. куда лучше "дата рождения" или "год рождения"
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
dimagolov
ты говоришь про числовую строку, а как быть с текстовой?

[upd]
NULL на варчаре возможен... проверил
[/upd]
-~{}~ 25.06.10 00:01:

Замечание про возраст правильное кстати. Так никто не хранит как он хочет
 

newARTix

Новичок
tenaro
Ваш вопрос вгоняет в ступор :)
Если в поле 0 или '', это ведь значит что поле пустое, а не юзеру ноль лет. Чем не устраивает этот критерий?

Когда юзер регистрируется, и не указывает какие-то данные, в БД заносятся какие-то дефолтные значения (0 или пустая строка). Сравнение с этими значениями и есть готовое решение MySQL и всех других технологий ;)
 

LONGMAN

Dark Side of the Moon..
А вообше не рекомендуется использовать default NULL без особых случай
 

prolis

Новичок
Автор оригинала: LONGMAN
А вообше не рекомендуется использовать default NULL без особых случай
кем не рекомендуется? Для меня наоборот, проще не париться: если null - значит значение по каким-либо причинам не определено.
 

iceman

говнокодер
c0dex
с фигали? null и для даты и для варчара и для своего типа катит...
 

tenaro

Новичок
Спасибо, всё как всегда просто)
а про возраст это я абстрактно, скрипт для ответа на вопросы, которые оставляют юзеры, если ответа нету, в админке рядом с конкретными вопросами появляется кнопка "ответить".
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
хехе, да, моя ошибка, в консоли не дописал им типы данных при создании таблицы, в итоге они ругались здорово на дефолтные нули(
 

iceman

говнокодер
tenaro
помоему ты чо то делаешь не правильно... структуру таблицы с студию...
 

tenaro

Новичок
да я только только осваиваю всё..
есть 2 таблицы - в black записываются все записи от юзеров, после апрува модератора данные перемещаются в white, структура обеих таблиц одинаковая:

CREATE TABLE IF NOT EXISTS `black` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`name` varchar(20) DEFAULT NULL,
`date` tinytext,
`questions` text,
`answer` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;
 

dimagolov

Новичок
Автор оригинала: LONGMAN
А вообше не рекомендуется использовать default NULL без особых случай
Если у тебя не стоит для поля NOT NULL, то оно по-умолчанию как раз NULL и будет (если не указал значение при создании записи).

А вообще позволять или нет полю быть NULL зависит от логики хранимых данных, как часть контроля целостности данных.

-~{}~ 25.06.10 08:09:

tenaro, ты вопросы храни в отдельной таблице, а в таблице ответов ссылку на нее. соответственно должен быть FOREIGN KEY и тип таблиц innoDB.

ну и кроме того, тип text небе нафиг не нужен, хватит и varchar(256) или varchar(512) на самый крайний случай.

а вот над типизацией ответов и их допустимых диапазонах тебе стоит задуматься. так как все же стоит валидирвать ответы на вопросы, да и не логично на любой вопрос просить ввода текста, пример с возрастом (точнее с датой рождения) тут показателен.
 
Сверху