Avatar billede soduno Novice
11. februar 2011 - 09:46 Der er 18 kommentarer

Ordernumber - bedste måde?

Jeg er lidt i tvivl om hvad den bedste måde er at lave et unikt ordernummer for hver
kunde. Har hørt at man kan få SQL til automatisk at generere et nummer, men er i tvivl hvordan - er det rigtigt?
Avatar billede repox Seniormester
11. februar 2011 - 09:49 #1
Du vælger bare ordernumber i din database som primær nøgle og vælger attributten 'auto increment'.

I phpMyAdmin: http://kyokasuigetsu25.files.wordpress.com/2011/01/image72.png
Avatar billede soduno Novice
11. februar 2011 - 09:56 #2
Men kan man sætte et tal hvor den skal starte fra, og kan man have både id og ordernumber som primary?
Avatar billede repox Seniormester
11. februar 2011 - 11:13 #3
Nej, du kan ikke have to primære nøgler.

Du kan i øvrigt også droppe enten id eller ordernumber, da begge unikt identificerer en ordre (da ordrenummeret ikke bør gå igen).

For at bestemme hvilket tal ordrenummeret skal starte fra, kan du bare indsætte en fiktiv ordre (via phpMyAdmin) med det ordrenummer som du ønsker den skal fortsætte fra.
Avatar billede killer_bee Nybegynder
11. februar 2011 - 11:15 #4
hvis du vil generere selv din nummer vil jeg sige at dette format er nok unikt:

<date><time><user id><sequence>
så vil blive noget i stil med
20110211112033IDUSER1001
| date time  | id  | sequence

her vil det være muligt for 1 enkelt bruger at lave 999 ordre pr minut ... så det er nok rigeligt :D .. ellers kam man lave sequence til at bare være løbende nr som bliver reset ved næste minut .. ... men ja ... det er op til en om man vil have en fast længde på ordrenummer ..
Avatar billede repox Seniormester
11. februar 2011 - 11:25 #5
#4
Det var da temmelig overkill - fejler auto increment noget, da? Så kan 1 enkelt bruger lave alle de ordrer han vil på et minut... og hvorfor skulle en enkelt bruger lave 999 ordrer pr. minut?

Og sikke et ordrenummer at skulle læse op, hvis man kontakter virksomheden...
Avatar billede mcb2001 Nybegynder
11. februar 2011 - 11:27 #6
#3, man kan godt have flere primærenøgler. De er bare en "samlet" nøgler hvor de to som kombination skal være unikke.

det kan f.eks. bruges til en booking, hvor du laver "dato" og "person" som samlet primærnøgle, og derved godt kan have flere bookinger samme dag, og flere bookinger på samme person, men aldrig samme person samme dag.



Og med hensyn til nummerserie, så kan det også sættes op hvor en nummerserie starter, bare smid dette med når du opretter tabellen:
AUTO_INCREMENT =1000;
Avatar billede repox Seniormester
11. februar 2011 - 11:45 #7
#6
Det du taler er composite primary keys (hvilket du i øvrigt ikke får lov til at lave i phpMyAdmin uden at skrive sql'en selv). Det eneste du får ud af det er at du får en indeksering af det felt du ikke vælger til at AI på lige fod med UNIQUE felter.
Avatar billede killer_bee Nybegynder
11. februar 2011 - 13:39 #8
#5

det kan være det er "overkill" for at læse det op, men hvis den skal være unik og man skal kunne finde kunden ud af det på en enkel key så er det nok ikke så slemt.

og autoincrement fejler ikke noget, mente baer at der skulle også identificeres bruger ud af det nr...

og en bruger skal ikke lave 999 pr minut, det var bare et tal så man ikke kom i noget gris :D... så lave det til 100000000 eller 4 .. det er lige fedt...
Avatar billede repox Seniormester
11. februar 2011 - 13:42 #9
#8
Er et fortløbende nummer ikke unikt?
Misforstå mig ikke - jeg stiller blot spørgsmålstegn ved din logik; at det ene unikke nummer/streng skulle være bedre end det andet forekommer mig ulogisk.
Avatar billede killer_bee Nybegynder
11. februar 2011 - 13:46 #10
#9 som jeg skrev, er et nummer unikt nok, men hvis han skulle have userID med i ordrenummer så skulle det sammensættes... og ja det kunne være <ID><nr> sammensætning .. bare man er klar over de bliver ikke lige lange ... men ellers er der ingen problem i det.
Avatar billede mcb2001 Nybegynder
11. februar 2011 - 13:53 #11
din revision vil bare brokke sig over at du ikke har en fortløbende nummerserie på dine ordrer - for det skal man have ifølge dansklovgivning. Du kan dog have flere nummerserier hvis det er forskellige typer ordrer...
Avatar billede killer_bee Nybegynder
11. februar 2011 - 14:04 #12
jeg vidste ikke at der er lovgivning på området .. og en ulogisk en vil jeg mene... jeg kan også sige at der er i hverfald noget som ikke overholder dette ... her er f.eks nogle af mine ordre nummer fra en online butik:

1448046    09-09-2008
100908    10-09-2008
1520065    13-01-2009
140109    14-01-2009
1695311    06-10-2009
71009    07-10-2009
2029412    15-01-2011
180111    17-01-2011

de er i hvert fald ikke fortløbende ..
Avatar billede repox Seniormester
11. februar 2011 - 14:09 #13
#11
Jeg vil give #12 medhold - jeg tror ikke der er en lovgivning der dikterer dette.
Jeg sidder - ligeledes - med en ordre, fra en dansk online shop, hvor ordrenummeret faktisk er noget så kryptisk som 11YMJGTSJX
Avatar billede mcb2001 Nybegynder
11. februar 2011 - 16:06 #14
Bogføringsloven:

https://www.retsinformation.dk/Forms/R0710.aspx?id=4336

Kapitel 4, Stk. 2. Registreringerne skal så vidt muligt foretages i den rækkefølge, som transaktionerne er foretaget i. Registreringerne skal henvise til de tilhørende bilag og indeholde oplysninger, der gør det muligt at bestemme den enkelte registrerings tidsmæssige placering i bogføringen.
Avatar billede majbom Novice
12. februar 2011 - 19:34 #15
jeg ved ikke om der er nogen lovgivning, men din numre i #12 - ER da fortløbende - du har 2 nummerserier...
Avatar billede soduno Novice
10. juni 2011 - 11:03 #16
Havde næsten glemt jeg havde oprettet dette spørgsmål.
Tak for svar, det gav mig noget at tænke over :)

B.la om hvem jeg skal give point? :S
Avatar billede majbom Novice
10. juni 2011 - 12:32 #17
jeg springer over
Avatar billede soduno Novice
22. oktober 2012 - 14:21 #18
Vil meget gerne have et svar fra dem der føler de vil have point så jeg kan få lukket tråden, og tildelt de rigtige points :-)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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