Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

SQL: уникальные значения поля для user_id при добавлении новой записи

#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;

Комментариев нет:

Отправить комментарий