Использование имен столбцов в качестве значения для строки в SQL - PullRequest
1 голос
/ 15 августа 2011

У меня есть следующий сценарий sql:

CREATE TABLE  `akalogixDB`.`users` (
`user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`priv_id` INT NOT NULL DEFAULT  '3',
`username` VARCHAR( 40 ) NOT NULL ,
`password` VARCHAR( 40 ) NOT NULL ,
`email` VARCHAR( 40 ) NOT NULL ,
`first_name` VARCHAR( 40 ) NULL ,
`last_name` VARCHAR( 40 ) NULL ,
`avatar` VARCHAR( 100 ) NULL DEFAULT 'images/avatars/no_avatar.jpg',
`mini_avatar` VARCHAR( 100 ) NULL DEFAULT 'images/avatars/no_avatar_mini.jpg',
`about` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL ,
`user_folder` VARCHAR(100) NOT NULL DEFAULT ====> #here is the problem
UNIQUE (
`username` ,
`email`)
) ENGINE = MYISAM ;

Я хотел бы дать значение по умолчанию для user_folder следующее: 'users / folder /' + user_id + current timestamp Как это сделатьзнаю, что я могу сделать это с помощью PHP, но есть ли способ сделать с инструкциями SQL.

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Вы можете использовать триггер. Что-то вроде:

CREATE TRIGGER `before_users_insert`
    BEFORE INSERT ON `users` FOR EACH ROW
    BEGIN
        IF NEW.user_folder IS NULL THEN
            SET NEW.user_folder = CONCAT('users/folders/',NEW.user_id,  UNIX_TIMESTAMP());
        END IF;
    END

Вам нужно выяснить, какое значение вызовет ваше значение по умолчанию, так как NULL (как я его кодировал) может не работать, потому что у вас есть NOT NULL в этом столбце. Это разумный подход, и я надеюсь, что это даст вам общее представление.

0 голосов
/ 15 августа 2011

Вам понадобится тригер: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html попробуйте что-то вроде этого:

create trigger t_users_bi 
before insert on users 
for each row BEGIN
   SET new.user_folder = CONCAT('users/folders/', new.user_id, current_timestamp);
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...