Toon posts:

[MySql] sorteren op eerste deel van string

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een tabel met indexen (als strings) die er zo ongeveer uit zien:

id_subid, enz

zoals bijvoorbeeld:

4_3
of
10_4

Het is de bedoeling dat deze indexen worden gesorteerd. Zolang de indexen niet groter zijn dan 9 gaat dit natuurlijk goed maar zo gauw ze 10 of hoger zijn gaat het fout (omdat 10, 11 etc dan VOOR 1,2,3 komt).

Nu kwam ik op het idee om dan de string te splitten op het '_'-karakter echter kom ik er niet uit hoe je dit in MySql voor elkaar moet krijgen in de query. De index bestaat uit maximaal twee getallen; dus er komt 1 keer een '_'-karakter voor alleen is niet bekend waar dit karakter staat zodat ik ook niet een deel van de string kan uitlezen en daarop kan sorteren.

Of is er nog een andere manier om dit te kunnen sorteren? Voor alle cijfers 2 karakters gebruiken (04 ipv 4) gaat eigenlijk niet op omdat ik dan opnieuw moet indexeren en bovendien kan het later mogelijk zijn dat het 3 karakters moeten worden.

Verwijderd

Ik heb even voor je gezocht in de manual. En ik heb dit kunnen vinden.
Ik denk dat het hiermee wel moet lukken:
http://dev.mysql.com/doc/mysql/en/String_functions.html
En dan onder SUBSTRING_INDEX.

[ Voor 8% gewijzigd door Verwijderd op 21-01-2005 17:08 ]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Dit ruikt nogal naar een fout datamodel :) Over het algemeen is het een erg slecht teken als je kolommen interne structuur hebben. Het is aan te raden om deze op te delen in meerdere kolommen, of eventueel een tabel toe te voegen.

Je zegt dat je een index hebt op id_subid. Als je op een substring daarvan gaat sorteren zul je daar echter geen baat bij hebben.

(Het zou idd kunnen met SUBSTRING_INDEX icm CAST)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Om het over snelheid maar niet te hebben...

waarom die 2 waarden niet in losse kolommen? Is sorteren geen probleem meer en lijkt me in de afhandelijk ook een stuk eenvoudiger :P

Aan elkaar plakken is een heel stuk eenvoudiger dan proberen het weer los te krijgen.

[ Voor 73% gewijzigd door Bosmonster op 21-01-2005 17:24 ]


  • PanMan
  • Registratie: November 1999
  • Laatst online: 15-05 21:22

PanMan

Spun!

Ik vraag me af of je wel een goed model hebt voor je data: Kan je niet beter met 2 kolommen werken, 1 voor het hoofd ID, en een voor het sub-id? Zal zoizo ook een stuk sneller werken, dan eerst de kolom in stukjes hakken, en dan daarop sorteren.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Verwijderd

Topicstarter
Mensen, het gaat om minder dan 50 rijen in de tabel hoor dus om de snelheid maak ik me niet druk :P

Alvast bedankt tot nu toe, ik zal eens kijken of het gaat lukken.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Verwijderd schreef op vrijdag 21 januari 2005 @ 17:43:
Mensen, het gaat om minder dan 50 rijen in de tabel hoor dus om de snelheid maak ik me niet druk :P

Alvast bedankt tot nu toe, ik zal eens kijken of het gaat lukken.
Die les heb ik geskipped geloof ik bij DB.. die waarin de leraar zegt 'bij kleine tabellen mogen jullie alles wat jullie geleerd hebben aan je laars lappen en gewoon crap modellen gebruiken' :P

Verwijderd

Topicstarter
Bosmonster schreef op vrijdag 21 januari 2005 @ 17:49:
[...]


Die les heb ik geskipped geloof ik bij DB.. die waarin de leraar zegt 'bij kleine tabellen mogen jullie alles wat jullie geleerd hebben aan je laars lappen en gewoon crap modellen gebruiken' :P
Zo bedoelde ik het natuurlijk niet he :9
Naar mijn idee kun je het eigenlijk op twee manieren doen. Mijn manier en jullie manier. Omdat ik ca 8 pagina's heb waar deze index wordt gebruikt (waarvan hij op 1 van de pagina's gesorteerd moet staan) leek het mij in dit geval (gezien de hele kleine database) makkelijker om de indexen op deze manier op te slaan ipv op meerdere kolommen te zetten en op alle pagina's de indexen aan elkaar plakken. Qua tijdsverschil voor het proces lijkt het mij dan ook slimmer, in dit specifieke geval, om het op deze manier te doen.

En bovendien, mocht er eens een 3e subsubindex komen dan hoef ik niets aan de scripts te veranderen. Niet dat ik dat ga doen maar ik vind het wel een goed argument :*)

Verwijderd

Als je toch een kleine database hebt.
Dan is het toch ook niet zo veel werk om hem om te zetten naar de juiste structuur?
Je hoeft het maar 1 keer te doen en dan heb je er voor de rest van je leven er plezier van. :)

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 21 januari 2005 @ 18:37:
Als je toch een kleine database hebt.
Dan is het toch ook niet zo veel werk om hem om te zetten naar de juiste structuur?
Je hoeft het maar 1 keer te doen en dan heb je er voor de rest van je leven er plezier van. :)
Dat dacht ik eerst ook maar dan kloppen de scripts volgensmij niet overal meer omdat deze indexen ook in andere tabellen voorkomen (en dan wel heel veel keer). Voor de andere tabellen waarin deze indexen voorkomen is het echter niet nodig te sorteren dus heeft het ook geen invloed op de tijd waarin query's worden uitgevoerd. Maar misschien dat ik nog eens een scriptje kan schrijven die die indexen even voor me omzet ervan uitgaande dat de scripts wel gewoon blijven werken.

  • PanMan
  • Registratie: November 1999
  • Laatst online: 15-05 21:22

PanMan

Spun!

veranderen van de db moet wel lukken met 1 query (update die met wat string bewerkingen delen van andere col gebruikt). Scripts aanpassen kan wel wat meer werk zijn, ja...

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949

Pagina: 1