#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;
Комментариев нет:
Отправить комментарий