आप जो खोज रहे हैं उसे प्राप्त करने के लिए, आपको ट्रिगर . इस कार्य को पूरा करने का कोई अन्य सीधा तरीका नहीं है (मुझे लगता है)।
मैंने अभी एक तेज़ डेमो आज़माया है:
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;
और यहाँ आउटपुट है जो मुझे मिला:
UserId | PostId | PostNumber |
==============================
1 | 1 | 1 |
1 | 10 | 2 |
1 | 20 | 3 |
2 | 1 | 1 |
2 | 10 | 2 |
3 | 1 | 1 |
4 | 1 | 1 |
यह रहा डेमो ।
Auto_Increment
पढ़ने के बाद दस्तावेज़ीकरण, मुझे ट्रिगर्स का उपयोग किए बिना इसे प्राप्त करने का एक और तरीका मिला। विचार एक Auto_Increment
creating बनाने के बारे में है कॉलम और इसे दूसरे कॉलम के साथ PRIMARY KEY
. के रूप में जोड़ें . हमारे मामले में यह UserId
होगा और AUTO_INCREMENT
PostNumber
. होगा और वे दोनों प्राथमिक कुंजी बनाते हैं। इस प्रकार है:
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;
यह हमें वही आउटपुट देगा जो पहले तरीके ने दिया था:
UserId | PostId | PostNumber |
==============================
1 | 1 | 1 |
1 | 10 | 2 |
1 | 20 | 3 |
2 | 1 | 1 |
2 | 10 | 2 |
3 | 1 | 1 |
4 | 1 | 1 |
और ये रहा डेमो दूसरे तरीके के लिए।