Задавайте вопросы, мы ответим
Вы не зашли.
как сделать что бы при вносе в таблицу значения имели вид групп
к примеру у меня поля id, user_id, param_id, name
что бы при вносе в таблицу id и param_id были auto_incriment и имело вот такой вид:
id | user_id | param_id | name
-----------------------------
0 | 1 | 0 | asd
-----------------------------
1 | 1 | 1 | asd
-----------------------------
2 | 2 | 0 | sdf
-----------------------------
3 | 2 | 1 | dgh
-----------------------------
4 | 2 | 2 | fgh
-----------------------------
5 | 3 | 0 | fgh
Заранее благодарю
Неактивен
id - это обычный auto_incriment, если вам не нужно, чтобы он начинался именно с 0
Для param_id триггер на before insert
в котором считаете кол-во строк с вносимым user_id и присваиваете это значение param_id
http://dev.mysql.com/doc/refman/5.5/en/ … igger.html
Неактивен
Бывает автоинкремент на нескольких колонках: http://dev.mysql.com/doc/refman/5.0/en/ … ement.html
For MyISAM and BDB tables you can specify AUTO_INCREMENT on a secondary column in a multiple-column index. In this case, the generated value for the AUTO_INCREMENT column is calculated as MAX(auto_increment_column) + 1 WHERE prefix=given-prefix. This is useful when you want to put data into ordered groups.
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;
Но в вашем случае он не подойдет, т.к. у вас уже есть автоинкремент на колонке id, а в одной таблице два автоинкремента быть не может.
Вам поможет триггер:
DELIMITER //
CREATE TRIGGER tbl_bi
BEFORE INSERT
ON tbl
FOR EACH ROW
BEGIN
DECLARE tmp INT; -- понадобится переменная
SELECT MAX(param_id)
FROM tbl
WHERE user_id = NEW.user_id
INTO tmp;
IF tmp IS NULL THEN
SET tmp = 0;
END IF;
SET NEW.param_id = tmp + 1;
END; -- конец BEGIN-END
// -- конец триггера
P.S. vasya, опередил
Неактивен
спасибо за ответы, буду пробовать
Неактивен