#mysql #sql
Подскажите, пожалуйста, возможно ли реализовать при добавлении новой записи в таблицу уникальное значение столбца dir(инкремент) для конкретного user_id? Если меняется user_id, то dir должен увеличиться на 1. Например, есть таблица: +-----+------+-----------+ | id | dir | user_id | +-----+------+-----------+ | 1 | 1 | 55 | | 2 | 1 | 55 | | 3 | 1 | 55 | | 4 | 2 | 22 | | 5 | 2 | 22 | | 6 | 2 | 22 | | 7 | 2 | 22 | | 8 | 2 | 22 | | 9 | 3 | 73 | | 10 | 3 | 73 | | 11 | 3 | 73 | +-----+------+-----------+ Здесь для user_id = 55 значение dir = 1, для user_id = 22 значение dir = 2 и т.д. Если в таблицу добавить запись с user_id к примеру 77, то столбец dir для этого пользователя должен быть равен 4. Заранее спасибо!
Ответы
Ответ 1
возможно ли реализовать при добавлении новой записи в таблицу уникальное значение столбца dir(инкремент) для конкретного user_id? Да, возможно. Для этого необходимо, чтобы а) первичным индексом таблицы была совокупность полей (user_id, dir) - именно в таком порядке б) таблица была создана на движке MyISAM. Подробности см. в документации. Для других движков используйте решения программного присвоения значения.Ответ 2
insert into table (id,dir,user_id) select new_id, max(dir) + 1 as ndir, new_user_id from table;Ответ 3
учитывая комментарий выше можно проверять есть ли запись для добовляемого пользователя если есть брать его dir если нет то максимум +1 insert into table (id,dir,user_id) select new_id, case when user_id is null then (select max(dir)+ 1 as dir from t) else t.dir end as dir, new_user_id from t where user_id = new_user_id;
Комментариев нет:
Отправить комментарий