[MySQL] Hoe beste doorzoekbare serienummers opslaan?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 22:03
Ik ben bezig een aantal zaken van Excel naar PHP/MySQL over te hevelen en nu ben ik bij het hoofdstukje serienummers van producten.

Opbouw:
ddddd[A-Z][1-12]
Oftewel 12345A1 bijvoorbeeld, of 54321B12
Het laatste gedeelte zegt wat over het jaar/maand waarin het product gekocht is, het eerste gedeelte is een volgnummer wat na 99999 weer overnieuw begint.

Nu is het zo dat we alleen het begin en het eindnummer opslaan. Dus als we honderd producten gekocht hebben in december, maken we een entry:
code:
1
2
START_NR    EIND_NR    AANTAL   PRODUCT
00001A12    00100A12    100     DELL OP1


Dat maakt het zoeken ietwat lastig, wat stel dat ik CTRL-F doe naar product 00050A12 dan vind ik niets.

Nu zit ik te denken hoe ik dit in SQL moet opslaan.
1) Splitten van volgnummer/datumgedeelte
code:
1
2
DATECODE  START_INCR  END_INCR  AMOUNT    ITEM
A12          00001      00100    100     DELL OP1


En dan één of ander script die in de range START_INCR t/m END_INCR kan zoeken. Ik zit dan wel met de index (misschien combo van twee kolommen)

2) Elk nummer apart op laten slaan
code:
1
2
3
SERIAL    ITEM
00001A12  DELL OP1
00002A12  DELL OP1

wat het zoeken met WHERE wel makkelijk maakt maar dan heb ik na een jaar tienduizenden rijen.

3) Zoals Excel-voorbeeld
Alleen zit ik dan weer met hoe ik kan zoeken naar een los nummer (en welke range erbij hoort).

Veranderen van serienummer is geen optie, het zal altijd cijfers+letter zijn.

Ik kan niet echt wat vinden op Google als ik zoek op 'sql search range string'. Ik zie wel hoe omgekeerd zoeken mogelijk is:
http://stackoverflow.com/...a-range-of-strings-in-sql
Maar ik wil geen range in mijn WHERE clause hebben, maar juist één serienummer waarbij ik een row terug krijg met de range waar hij in zit.

Misschien kijk ik over iets heel simpels heen maar ik zie het niet meer door al dat gebrainstorm 8)7 :+

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 17:52

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Ten eerste is MySQL echt niet bang van enkele tienduizenden rijen.

Ten tweede kan je toch gewoon iets doen als:
SQL:
1
2
3
Select *
From Product
Where zoekstring >= start and zoekstring =< end

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 22:03
Ja zeg...warempel 8)7
Dat bedoel ik nu met de laatste zin van mijn OP :P

Acties:
  • 0 Henk 'm!

  • ETzPliskin
  • Registratie: Januari 2003
  • Laatst online: 16:27

ETzPliskin

PS3 ID: Kretus

Alle serienummers in een aparte rij opslaan zal het gemakkelijkste zijn. Een database kan wel om met tienduizende rijen :)

Heb je de data goed genormaliseerd? Anders kan het ook nog over verschillende tabellen gaan eventueel.

Acties:
  • 0 Henk 'm!

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 22:03
Er zit naar mijn mening redelijke normalisatie in (item informatie staat in aparte tabel, gelinkt met item_id, vor gemak heb ik in mijn voorbeeld echter direct de naam er in gezet) alleen ik weet nog niet precies of ik het serienummer moet gaan opsplitsen in datum_code en volgnummer of dat ik het in één kolom moet laten staan. Maar ik denk dat dat laatste beter is, want een volgnummer kan namelijk weer opnieuw beginnen (het is de combinatie die het uniek maakt).

Elk serienummer moet in de toekomst wel een aparte rij krijgen in verband met de historie die ik aan één item wil hangen, en een database kan idd wel om met vele rijen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
maarud schreef op vrijdag 11 september 2015 @ 14:30:
alleen ik weet nog niet precies of ik het serienummer moet gaan opsplitsen in datum_code en volgnummer of dat ik het in één kolom moet laten staan. Maar ik denk dat dat laatste beter is, want een volgnummer kan namelijk weer opnieuw beginnen (het is de combinatie die het uniek maakt).
Volgnummer en datumcode klinken wel als 2 seperate attributen. Unique constraint over beide kolommen en klaar ben je.

{signature}

Pagina: 1