21. februar 2012 - 22:28Der er
9 kommentarer og 1 løsning
OrdreId generering
Kære eksperter,
Jeg vil gerne høre, om der findes en bedre måde at generere et ordreId end andet.
Hvad gør I? Blot laver fortløbende nummer? Det ville jo betyde, at man skal registrere ordreId allerede inden købet går igennem for ikke at få to identiske?? Jeg har også overvejet at indskrive dato / brugerid / pris i ordreid - måske er det nemmere senere hen? Jeg ved, at man i nogle stregkoder har gemt forståelige data, så det kunne jo være samme princip.
Jeg vil gerne høre, hvad der bliver benyttet rundt omkring.
Under alle omstændigheder skal du da registrere et ordrenummer for tid og evighed - sådan da.
Hvis ordrer kan oprettes af flere samtidigt må du i gang med transaction processing hvor man låser tabellen og frigør den nar transaktionen er overstået. På den måde sikrer du dig at der ikke kan være flere ordrer med det samme nummer. Mere om det hvis du har behov.
Hvis du skal bruge nummeret når du opretter ordren (f.eks. i en formular) er #oleboles med autoincrement ikke helt færdig. I så fald skal du starte med at oprette en tom record eventuelt markeret som "under oprettelse" samt anden identifikation og derefter SELECTe den nye ordre så du har det nye genererede ordrenummer.
Som olebole gør opmærksom på kan man lissågodt lade DB lave arbejdet inden man begynder at konstruere krøllede id med dato og alt det andet du nævner.
Ud over det fornuftige i at bruge PDO, overså jeg at du havde et brugerid ved bestilling. Altså man logger ind som bruger først ? I så fald er det nemt at holde styr på ordren ved at bruge session_id() !
@showsource: En session_id er kun anvendelig som en midlertidigt ordreID. Når ordren indsættes i databasen, kan session_id ikke anvendes, da en ordreID jo skal være unik over tid.
I morgen kan du jo sagtens logge ind på Eksperten og få tildelt samme session_id, som jeg har fået tildelt i dag *o)
hmm, session_id() sættes jo ved session_start() og holder kun så længe browservindue er åbent, eller indtil time-out, som sat i php.ini eller i script.
Vi er formodentlig enige om, at en ordre skal gemmes i en database. Der skal den have en ordreID, og den skal være unik, så ordrer ikke sammenblandes.
Bruger man en seesion_id til dette formål, er ordreID'en ikke nødvendigvis unik. En session_id er jo karakteriseret ved kun at være unik over et kort tidsrum - idet, der ikke må kunne oprettes to samtidige sessions med samme session_id.
Et felt med autoincrement har en unik værdi over tid - i modsætning til en session_id
Vi kører med et kurv ID, altså indkøbskurven, som jeg antager at du også har, har et ID som følger kunden hele vejen, når så betalingen er sket laves ordre ID'et, og kurv ID er så stadigvæk bundet op på kunden.
Side løbende har vi iøvrigt en tabel med fakturanummer
Jeg skal åbenbart kun have ordrenummer på, så jeg undgår fakturanummer.
Der er ikke nogen kurv, da det kun handler om et enkelt køb.
Så jeg har valgt tidspunkt-brugerid
Synes godt om
Ny brugerNybegynder
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.