Để đạt được những gì bạn đang tìm kiếm, bạn phải sử dụng trình kích hoạt . Không có cách nào khác trực tiếp để hoàn thành nhiệm vụ này (tôi đoán vậy).
Tôi đã thử một bản demo nhanh ngay bây giờ:
Create Table SoQuestion (
UserId int,
PostId int,
PostNumber int null
);
CREATE TRIGGER inc_post_num
BEFORE INSERT ON SoQuestion
FOR EACH ROW
set New.PostNumber = (select num
From (select count(*) as num
from SoQuestion
where UserId = New.UserId) as b)
+ 1;
insert into SoQuestion (UserId, PostId) Values (1,1);
insert into SoQuestion (UserId, PostId) Values (1,10);
insert into SoQuestion (UserId, PostId) Values (1,20);
insert into SoQuestion (UserId, PostId) Values (2,1);
insert into SoQuestion (UserId, PostId) Values (2,10);
insert into SoQuestion (UserId, PostId) Values (3,1);
insert into SoQuestion (UserId, PostId) Values (4,1);
select * FROM SoQuestion;
Và đây là kết quả mà tôi nhận được:
UserId | PostId | PostNumber |
==============================
1 | 1 | 1 |
1 | 10 | 2 |
1 | 20 | 3 |
2 | 1 | 1 |
2 | 10 | 2 |
3 | 1 | 1 |
4 | 1 | 1 |
Đây là bản trình diễn .
Sau khi xem qua Auto_Increment
tài liệu, tôi đã tìm thấy một cách khác để đạt được điều này mà không cần sử dụng trình kích hoạt. Ý tưởng là về việc tạo một Auto_Increment
và thêm nó với một cột khác dưới dạng PRIMARY KEY
. Trong trường hợp của chúng tôi, nó sẽ là UserId
và AUTO_INCREMENT
sẽ là PostNumber
và cả hai đều tạo thành khóa chính. Đây là cách:
Create Table SoQuestion (
UserId int,
PostId int,
PostNumber int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UserId, PostNumber)
);
insert into SoQuestion (UserId, PostId) Values (1,1);
insert into SoQuestion (UserId, PostId) Values (1,10);
insert into SoQuestion (UserId, PostId) Values (1,20);
insert into SoQuestion (UserId, PostId) Values (2,1);
insert into SoQuestion (UserId, PostId) Values (2,10);
insert into SoQuestion (UserId, PostId) Values (3,1);
insert into SoQuestion (UserId, PostId) Values (4,1);
select * FROM SoQuestion;
Điều này sẽ cung cấp cho chúng tôi kết quả tương tự như cách đầu tiên đã đưa ra:
UserId | PostId | PostNumber |
==============================
1 | 1 | 1 |
1 | 10 | 2 |
1 | 20 | 3 |
2 | 1 | 1 |
2 | 10 | 2 |
3 | 1 | 1 |
4 | 1 | 1 |
Và đây là bản trình diễn cho cách thứ hai.