Разные id в таблице mysql

211
15 марта 2018, 10:44

Приветствую.

Имеется сайт, который выводит записи пользователей вида «id, name, goods, note, date, user».

Каждому пользователю показываются свои записи (т.е. запрос такого вида “select * where user = пользователь")

Необходимо сделать так, чтобы у каждого пользователя id записей был свой, а не общий. Например 1, предмет, null, 14.03.2018, admin ; 1, предмет, null, 14.03.2018, ne_admin ; 2, предмет2, null, 15.03.2018, admin; и т.д. Надеюсь понятно.

Как посоветуете сделать, каждому пользователю создать свою таблицу, чтобы id не путались или можно сделать все в одной таблице? Только как это сделать?

Answer 1

Можно сделать и в одной таблице, для этого нужно будет убрать auto_increment с поля id а при добавлении записей в таблицу считать его отдельным запросом типа

SELECT MAX(id) FROM tbl WHERE user = пользователь

Ну и primary key сделать составным на поля id, user

Answer 2

Необходимо сделать так, чтобы у каждого пользователя id записей был свой, а не общий.

Задача легко решается, если будет сочтено возможным использовать в качестве движка таблицы MyISAM. См. https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

For MyISAM 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.

Т.е. в данном конкретном случае, например, так:

CREATE TABLE records (
    id     INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    name   VARCHAR(xxx), 
    goods  VARCHAR(yyy), 
    note   VARCHAR(zzz), 
    date   TIMESTAMP, 
    userID INT UNSIGNED NOT NULL,
    PRIMARY KEY (userID, id),
    CONSTRAINT userID FOREIGN KEY (userID) REFERENCES users (id)
) ENGINE MyISAM;
READ ALSO
Как создать план для платежной системы Stripe (библиотека OmniPay)?

Как создать план для платежной системы Stripe (библиотека OmniPay)?

Использую библиотеку OmniPay для платежной системы Stripe

181
Имя класса для hasMany и hasOne Yii2

Имя класса для hasMany и hasOne Yii2

Имеются два геттера связей в контроллере

161
Как создать конфиг. файл для консольного приложения c++

Как создать конфиг. файл для консольного приложения c++

У меня есть примитивное консольное приложение c++, мне нужно сделать так, чтобы был отдельный конфигурационный файл в котором будут храниться...

261