2013-02-04 5 views
-1

comment créer un numéro d'ID d'incrémentation automatique composé de l'année et du numéro, par exemple: "2012-0001" il sera auto_incrément à "2012-0002" si je saisis une autre donnée.comment créer un numéro d'identification d'incrémentation automatique

Merci!

+0

Les identifiants d'incrémentation automatique sont uniques. Si 001 et 002 sont différents, quelle est la logique derrière l'ajout de l'année? au lieu de cela, vous pouvez enregistrer l'année dans un champ supplémentaire et ensuite effectuer la partie de codage – swapnesh

+0

mais je veux inclure l'année .. – user2038163

Répondre

2

En utilisant MyISAM, vous pouvez le faire ...

CREATE TABLE myisam_example(year INT NOT NULL,id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(year,id)) ENGINE=MyISAM; 

INSERT INTO myisam_example VALUES (2012,NULL); 
INSERT INTO myisam_example VALUES (2012,NULL); 
INSERT INTO myisam_example VALUES (2012,NULL); 
INSERT INTO myisam_example VALUES (2012,NULL); 
INSERT INTO myisam_example VALUES (2012,NULL); 
INSERT INTO myisam_example VALUES (2013,NULL); 
INSERT INTO myisam_example VALUES (2013,NULL); 
INSERT INTO myisam_example VALUES (2013,NULL); 
INSERT INTO myisam_example VALUES (2013,NULL); 
INSERT INTO myisam_example VALUES (2013,NULL); 

SELECT * FROM myisam_example; 
+------+----+ 
| year | id | 
+------+----+ 
| 2012 | 1 | 
| 2012 | 2 | 
| 2012 | 3 | 
| 2012 | 4 | 
| 2012 | 5 | 
| 2013 | 1 | 
| 2013 | 2 | 
| 2013 | 3 | 
| 2013 | 4 | 
| 2013 | 5 | 
+------+----+ 

SELECT * 
    FROM myisam_example 
WHERE CONCAT(year,'-',LPAD(id,5,0)) = '2012-00004'; 
+------+----+ 
| year | id | 
+------+----+ 
| 2012 | 4 | 
+------+----+ 

- contemplation tranquille un moment pour l'indice pauvre

SET @sql = CONCAT('SELECT * FROM myisam_example WHERE CONCAT(year,\'-\',LPAD(id,5,0)) = ?'); 

PREPARE stmnt1 FROM @sql;     
SET @a = '2012-00004'; 
EXECUTE stmnt1 USING @a; 
+------+----+ 
| year | id | 
+------+----+ 
| 2012 | 4 | 
+------+----+ 
DEALLOCATE PREPARE stmnt1; 

... et en prenant un peu plus loin (coz I qu'il était temps que je savais comment utiliser les commandes préparées à l'intérieur sprocs) ...

DROP PROCEDURE fetchid; 
DELIMITER $$ 
CREATE PROCEDURE fetchid(IN a VARCHAR(10)) 
BEGIN 
SET @sql = CONCAT('SELECT * FROM myisam_example WHERE CONCAT(year,\'-\',LPAD(id,5,0)) = ?'); 
PREPARE stmnt1 FROM @sql;     
SET @a = a; 
EXECUTE stmnt1 USING @a; 
DEALLOCATE PREPARE stmnt1; 
END $$ 

DELIMITER ; 

CALL fetchid('2012-00004'); 
+------+----+ 
| year | id | 
+------+----+ 
| 2012 | 4 | 
+------+----+ 
+0

ce que je veux, c'est quand je cherche une entrée dans ma base de données je tape seulement le numéro d'identification "2012-0001" – user2038163

0

vous allez devoir écrire un programme pour faire ça. La solution de Strawberry vous montre ce qui doit être fait du côté SQL, mais vous devez écrire votre interface (non-sql) pour casser l'entrée, de sorte que lorsque l'utilisateur entre 2012-0001, la chaîne de requête dit quelque chose comme "O WH année = 2012 ET id = 0001 "

Si vous demandez si vous pouvez avoir une colonne dans votre tableau qui peut contenir un trait d'union mais une auto-incrémentation, la réponse est non.

Questions connexes