Database tabel sorteert verkeerd.
ik loop even tegen een probleem wat ik nog niet eerder ben tegengekomen en ik heb al een tijdje zitten zoeken maar kan niet echt tot een oplossing komen vandaar dat ik hier maar een post maak.
Ik ben op dit moment bezig met het maken van een tooltje om een aantal excel bladen te importeren in de database (ik kan deze niet zomaar direct importeren in de DB omdat er ook nog een aantal berekeningen moeten worden uitgevoerd op de bladen). Nu is de tool helemaal af en hij werkt ook erg goed alleen loop ik nu vast in de database. Het probleem is dat hij de tabel waarin de gegevens worden geimporteerd de gegevens niet correct sorteert op datum en vervolgens tijd.
De opbouw van de excel bladen zijn redelijk simpel:
Datum, uur (1t/m24), Ca, Cb, Cc.
20080101, 12, 23.2, 23.1, 12
20080101, 13, 12.2, 16.5, 11
20080101, 12, 17.9, 18.1, 12
Aan dit blad worden uiteindelijk nog 4 extra kolommen toegevoegd met berkeende waarden. De uiteindelijke database structuur ziet er alsvolgt uit:
datum(date)
uur(time)
Ca(double)
Cb(double)
Cc(double)
dri(double)
fis(int)
ta(int)
In deze tabel heb ik datum + uur als primary key gemaakt.
Na het importeren zien de gegevens in mijn tabel er alsvolgt uit (ik zal alleen even de datum en tijd plaatsen, alles wordt in principe goed geimporteerd alleen de volgorde is niet goed):
datum, uur
20080101, 12
20080101, 11
20080101, 10
20080101, 9
20080101, 8
20080101, 7
20080101, 6
20080101, 5
20080101, 4
20080101, 3
20080101, 2
20080101, 1
20080102,24
Soms gebeurt het ook dat er ineens een verkeerde datum instaat zodat dit er ineens in staat:
20091120 ,17
20091101 ,24
20091101 ,23
De datum volgorde klopt dus ineens niet.
Ik heb al gekeken of de volgorde waarop de gegevens worden geïmporteerd verkeerd gaat maar dit gaat helemaal goed (ik liet de tool elke sqlquery die hij uitvoerd afdrukken zodat ik kon zien dat alles goed ging).
Nu weet ik niet waarom dit sorteren fout gaat of hoe ik dit moet oplossen. Ik zat eerst zelf te denken om na het importeren van een blad een methode te zoeken om de tabel te laten hersorteren maar aangezien er zon 400 excel bladen moeten worden geimporteerd(het stamt nog uit de oudheid :), ook de reden dat ik een tooltje maak zodat iemand anders ze later kan importeren :)) en er in totaal meer dan een miljoen rijen in de tabel komen te staan leek mij dit niet echt efficient om na elke import de gehele tabel te laten sorteren.
Dus nu mijn vraag weet iemand waarom dit fout gaat want ik heb zelf geen idee eerlijk gezegd. Alvast bedankt :)
Je kunt tijdens het opvragen van de gegevens toch werken met de sorteer-functie?
In principe zat ik daar ook aan te denken maar een ander (oud) programma gaat gebruik maken van die gegevens en deze sorteert dat niet. Tevens.. vindt het gewoon raar waarom het zo vreemd gaat, wil weten waarom :)
Ik zie in de opgave van je excel een dubbele waarde van de tijd voorkomen.
Mysql doet het gewoon goed, want uur 24 bestaat niet, om twaalf uur p.m begint namelijk de volgende dag
Ger van Steenderen op 22/11/2011 12:32:25:
Ik zou sowieso al geen primary key doen op de combinatie van datum en tijd.
Ik zie in de opgave van je excel een dubbele waarde van de tijd voorkomen.
Mysql doet het gewoon goed, want uur 24 bestaat niet, om twaalf uur p.m begint namelijk de volgende dag
Ik zie in de opgave van je excel een dubbele waarde van de tijd voorkomen.
Mysql doet het gewoon goed, want uur 24 bestaat niet, om twaalf uur p.m begint namelijk de volgende dag
datum in combinatie met tijd zijn de enige unieke waarde. Misschien dat ik een extra kolom id kan toevoegen. Wat betreft uur 24. Als ik in de tabel kijk zie ik wel gewoon de volgende waarde staan:
tijd: 24:00:00
Ama saril op 22/11/2011 13:05:29:
datum in combinatie met tijd zijn de enige unieke waarde. Misschien dat ik een extra kolom id kan toevoegen. Wat betreft uur 24. Als ik in de tabel kijk zie ik wel gewoon de volgende waarde staan:
tijd: 24:00:00
tijd: 24:00:00
Dat kan, maar mysql ziet het als 00:00:00
Feitelijk is dan je vraag ook foutief, want je past geen sortering toe en mysql sorteert dus ook niet verkeerd.
Tenzij ik het gewoon allemaal totaal verkeerd begrijp natuurlijk.....
Erwin H op 22/11/2011 18:57:26:
De lijst die je toonde van hoe de gegevens in de database staan, is dat een directe weergave van alle records zonder order by statement? In dat geval kan je het volgens mij niet aanpassen. Dat is een gevolg van hoe de database de gegevens verwerkt en opslaat. Normaal gesproken is dat ook niet van belang juist vanwege de sorteer opties.
Feitelijk is dan je vraag ook foutief, want je past geen sortering toe en mysql sorteert dus ook niet verkeerd.
Tenzij ik het gewoon allemaal totaal verkeerd begrijp natuurlijk.....
Feitelijk is dan je vraag ook foutief, want je past geen sortering toe en mysql sorteert dus ook niet verkeerd.
Tenzij ik het gewoon allemaal totaal verkeerd begrijp natuurlijk.....
Het is inderdaad een directe weergave van hoe het in de database staat. Heb zelf even gekeken naar het programma wat gebruik moet maken van deze gegevens en deze sorteert helaas niet dus moeten ze maar een programmeur inhuren om dat aan te passen :).
Bedankt in ieder geval voor de reacties.