Avatar billede hobz Nybegynder
13. maj 2003 - 12:15 Der er 24 kommentarer og
1 løsning

Format på Autoincrement

Kan man autoincremente i dette format: 0001, 0002, 0003 ?
Avatar billede fsconsult.dk Nybegynder
13. maj 2003 - 12:20 #1
Nej, auto increment sker på et normalt numerisk felt i databasen, som som sådan ikke er formatteret.

Du kan dog når du henter feltet ud af databasen vælge at benytte NUMBER_FORMAT funktionen, som giver dig flere formatteringsmuligheder (husker ikke umiddelbart om foranstillede nuller er en af mulighederne).
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 12:26 #2
Men du skal jo som udgangspunkt ikke bruge tallet til noget, andet end
at det er en unik værdi. Derfor kan den ligesågodt være 1 som 0001
Avatar billede hobz Nybegynder
13. maj 2003 - 13:02 #3
Jeg tror da vist ikke, at NUMBER_FORMAT er en mysql funktion?
Avatar billede hobz Nybegynder
13. maj 2003 - 13:13 #4
Fandt en løsning:
SELECT INSERT( '0000', 5 - LENGTH(id), LENGTH(id), id) AS ID
Avatar billede fsconsult.dk Nybegynder
13. maj 2003 - 13:14 #5
Sorry, MySQL funktionen hedder bare FORMAT (NUMBER_FORMAT er en PHP funktion). MySQL FORMAT kan dog ikke lave foranstillede nuller.
Avatar billede fsconsult.dk Nybegynder
13. maj 2003 - 13:15 #6
nå ja det virker også ...  ihvertfald sålænge ID er mindre end 10000 :-)
Avatar billede hobz Nybegynder
13. maj 2003 - 13:15 #7
Ja det skulle den gerne forblive :)
Avatar billede morw Nybegynder
13. maj 2003 - 13:45 #8
Jaja, i bliver nok klogere:

Brug zerofill:

CREATE TABLE ttt (
  id mediumint(8) unsigned zerofill NOT NULL auto_increment,
  navn varchar(20) NOT NULL default '',
  PRIMARY KEY  (id)
)
Avatar billede hobz Nybegynder
13. maj 2003 - 14:11 #9
Hvad skal det forestille?
Avatar billede morw Nybegynder
13. maj 2003 - 14:14 #10
Du bad om formatet - jeg skrev et eksempel. Dog skal du bruge mediumint(4) hvis det skal være med 4 cifre
Avatar billede fsconsult.dk Nybegynder
13. maj 2003 - 14:16 #11
morw> kendte ikke til zerofill optionen .. du har ret :-)

hobz> du kan gøre som morw foreslår, og tilføje ZEROFILL på dit ID felt i tabeldefinitionen. Så skulle du få det du spurgte om oprindeligt.
Du skal dog formentlig ændre datatypen til mediumint(4)  (for 4 ciffre).
Avatar billede hobz Nybegynder
13. maj 2003 - 14:19 #12
Det virker jo ikke!
Avatar billede morw Nybegynder
13. maj 2003 - 14:21 #13
Jo - du har blot lavet en eller anden fejl.

Post din create query. Det er svært at gætte uden en krystalkugle
Avatar billede hobz Nybegynder
13. maj 2003 - 14:23 #14
CREATE TABLE `ttt` (
  `id` mediumint(4) unsigned zerofill NOT NULL auto_increment,
  `test` varchar(12) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) TYPE=MyISAM
Avatar billede hobz Nybegynder
13. maj 2003 - 14:25 #15
Mine id's bliver 1,2,3...
Avatar billede morw Nybegynder
13. maj 2003 - 14:26 #16
Virker fint her. Ingen grund til at bruge UNIQUE på en PRIMARY KEY da det er underforstået
Avatar billede hobz Nybegynder
13. maj 2003 - 14:28 #17
Du får altså en række id's der indeholder: 0001, 0002, 0003 ?
Avatar billede morw Nybegynder
13. maj 2003 - 14:29 #18
Jeps
Avatar billede hobz Nybegynder
13. maj 2003 - 14:30 #19
Det var sgu da underligt. Bruger den en mysql-manager?
Avatar billede fsconsult.dk Nybegynder
13. maj 2003 - 14:31 #20
Har også testet det, og det virker fint.

Spørgsmålet er hvordan du henter det ud af databasen igen?  Hvis det bliver konverteret til en integer, vil de foranstillede nuller jo forsvinde igen.
Avatar billede morw Nybegynder
13. maj 2003 - 14:31 #21
Jeg tester fra en mysql-promt:

mysql> select * from ttt2;
+------+-------+
| id  | test  |
+------+-------+
| 0001 | NULL  |
| 0002 | sdf  |
| 0003 | sfdfd |
+------+-------+
3 rows in set (0.00 sec)

Bruger du en eller anden skodclient?
Avatar billede hobz Nybegynder
13. maj 2003 - 14:36 #22
bruger ems mysql manager.
Avatar billede hobz Nybegynder
13. maj 2003 - 14:40 #23
Oh.. hvis man CONCAT'er den virker det. Tak for det!
Avatar billede fsconsult.dk Nybegynder
13. maj 2003 - 14:42 #24
hvad med: "select cast(id as char(4)) from ttt"

Hvis dit program ikke kender ZEROFILL og bare opfatter feltet som en integer, kan det være problemet.
Generelt skal du nok hente/behandle feltet som CHAR/VARCHAR for at forhindre dette.
Avatar billede hobz Nybegynder
13. maj 2003 - 14:56 #25
Mener ik man kan CAST'e 2 værdier så godt som man kan CONCAT'e dem.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester