|
|
|
| Создаю таблицу запросом
CREATE TABLE `score` (
`student_id` int(10) unsigned NOT NULL,
`id_group` tinyint(3) unsigned NOT NULL,
`id_event` int(10) unsigned NOT NULL,
`score` tinyint(3) NOT NULL,
`data` date NOT NULL,
`id_prepod` smallint(6) unsigned NOT NULL,
`dopusk` enum('P','Y') DEFAULT 'P',
`zachet` enum('Y','N') DEFAULT 'N',
PRIMARY KEY (`id_event`,`student_id`),
KEY `student_id` (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
|
При заполнении, поле score заполняется 0. | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 09:42)
| | при заполнении каким оператором?
И в чем криминал? | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 10:04)
| | Делаю запрос на заполнение
REPLACE INTO score values
|
В ячейке score, при незаполненном поле формы, прописывается 0. При выводе, я получаю не пустое поле, а в нем прописан 0. | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 10:46)
| | REPLACE INTO score VALUES дальше!
То есть какое-то значение Вы указываете?
Пустым поле оказаться не может - оно помечено как NOT NULL. | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 10:51)
| | Выходит, что нужно вырезать этот 0 при выводе программно или делать поле текстовым и обрабатывать его ctype_digit, чтобы не пролазило ничего, кроме чисел? | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 11:19)
| | Что за свойство Вы храните в этом поле?
Может Вы просто тип поля выбрали неподходящий? | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 12:29)
| | В поле будет числовой результат в интервале от 0-100. Я сейчас задал ему char(3), теперь вроде все как хочется:)) | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 12:41)
| | Если в поле предполагается хранить именно число в диапазоне 0-100, то лучшего типа, чем у Вас сейчас - TINYINT(3) - не придумать.
Это число всегда известно для всех строк таблицы или лишь для некоторых? | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 12:45)
| | Да, это число всегда известно. Только вот не получается у меня, при использовании TINYINT(3), сделать так, чтобы поле оставалось свободным, если в него не записана информация. Прописывается 0. Поставил char(3) и все пошло как надо. | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 13:05)
| | если поле свободно - значит информация в нем неизвестна.
Если Вы допускаете появление такого состояния поля, его нужно описывать как NULL
TINYINT(3) NULL | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 13:15)
| | Объясните мне пожалуйста такой момент
если я определяю тип поля как
`score` tinyint(3) NOT NULL
|
Но при записи, не размещаю в нем информацию, то есть есть вариант, когда это поле просто не заполняется.
В этом случае, какой вариант предпочтительней
или
Чтобы не было проблем с последующей сортировкой данных по этому столбцу. | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 13:47)
| | Вы не привели запрос, который, по Вашему мнению, добавляя запись, таки не размещает информацию.
PS.
Ах, да.
>Но при записи, не размещаю в нем информацию, то есть есть вариант, когда это поле просто не заполняется.
>В этом случае, какой вариант предпочтительней NOT NULL или DEFAULT NULL
NOT NULL Вам просто не позволит создать запись, не поместив в поле хоть что-то.
DEFAULT NULL конечно. | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 14:15)
| | Собственно сам запрос
REPLACE INTO score values('$st_id',
'$id_gr',
'$id_event',
'$ocenka',
NOW(),
'$id_prepod',
'$dopusk',
'$zachet')";
|
Теперь небольшое пояснение
При проведении занятия может выставляться три параметра
dopusk - принимает значение P и Y то есть, допущен к выполнению дальнейшей работы или просто присутствовал -не прогул.
Если получен допуск, то другой вариант описывает - zachet, который принимает значение Y/N, то есть выполнена работа или не выполнена. Если работа выполнена, то идет защита, результат которой уже вводится в поле score в виде переменной ocenka.
В результате пирамида, может быть получен допуск и выполнена работа, но не защищена, то есть, оценка не выставлена. | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 14:34)
| | сразу.
Это не запрос - это обрывок.
Грязный обрывок, Вы даже "двойные кавычки убрали, значения $переменных при этом не подставив"
Пардон. открывающую кавычку . Все равно грязный. Тем более грязный. | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 14:34)
| | >При проведении занятия может выставляться три параметра
У mysql_query() нет трех параметров. Грубо говоря - только один. Сформированный текст запроса. | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 14:39)
| | Прошу прощения. Вот при таких значениях , в поле score прописывается 0, который вроде как бы мне там и не нужен.
$id_gr = 23;
$id_gr = 17;
$ocenka = "";
$id_prepod = 1;
$dopusk = "Y";
$zachet = "Y";
$query= "REPLACE INTO score values('$st_id',
'$id_gr',
'$id_event',
'$ocenka',
NOW(),
'$id_prepod',
'$dopusk',
'$zachet')";
mysql_query($query);
|
| |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 14:50)
| | Вот при таких значениях можно сделать не mysql_query($query) , а echo $query; и показать тут текст.
Но и сейчас видно, что по какой то странной причне Вы все параметры полей, в том числе и числовые , записываете в апострофах, то есть не числами, а строками.
Этим Вы запутываете себя - не сервер БД. | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 15:07)
| | Результат echo query
REPLACE INTO score values('23', '17', '27', '', NOW(), '1', 'Y', 'Y')
|
Меня интересует использование типов полей в случае такого запроса.
Какое предпочтительней TINYINT (3) или CHAR (3)?
В случае с TINYINT NOT NULL или DEFAULT NULL? | |
|
|
|
|
|
|
|
для: куч1963
(15.04.2010 в 16:57)
| | не ставьте телегу впереди лошади.
Сперва модель задачи - потом схема БД , структура таблицы - потом уже запрос. | |
|
|
|