SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.10.2011 23:42:57

bookin
Участник
Зарегистрирован: 17.10.2011
Сообщений: 2

группы в таблице

как сделать что бы при вносе в таблицу значения имели вид групп

к примеру у меня поля 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

Заранее благодарю

Неактивен

 

#2 18.10.2011 00:11:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: группы в таблице

id - это обычный auto_incriment, если вам не нужно, чтобы он начинался именно с 0

Для param_id триггер на before insert
в котором считаете кол-во строк с вносимым user_id и присваиваете это значение param_id

http://dev.mysql.com/doc/refman/5.5/en/ … igger.html

Неактивен

 

#3 18.10.2011 00:54:27

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: группы в таблице

Бывает автоинкремент на нескольких колонках: 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, опередил smile

Неактивен

 

#4 18.10.2011 01:13:45

bookin
Участник
Зарегистрирован: 17.10.2011
Сообщений: 2

Re: группы в таблице

спасибо за ответы, буду пробовать

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson