[MySQL] varchar sorteer probleem

Pagina: 1
Acties:

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 02-03 17:41
Hi, ik heb een MySQL db met een varchar kolom waarin de volgende data voorkomt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
id naam
15 Boardroom 1
16 Boardroom 2
17 Boardroom 3
18 Boardroom 4
19 Boardroom 5
20 Boardroom 6
21 Boardroom 7
22 Boardroom 9
23 Boardroom 10
24 Boardroom 11
25 Boardroom 12
26 Boardroom 13


`naam` is dus een varchar veld, aangezien er naast getallen ook tekst in voorkomt.

Ik heb een query waarbij ik op `naam` sorteer,.. maar dan krijg ik de volgende output:

code:
1
2
3
4
5
6
7
8
9
10
11
12
id naam
15 Boardroom 1 
23 Boardroom 10 
24 Boardroom 11 
25 Boardroom 12 
26 Boardroom 13 
27 Boardroom 14 
28 Boardroom 15 
29 Boardroom 16 
30 Boardroom 17 
31 Boardroom 18 
16 Boardroom 2


Niet iedere naam bevat een getal.. dus een INT veldtype is niet van toepassing.
Ik heb dingen gevonden over CASE & CONVERT maar kwam er niet uit hoe dat op mijn probleem toe te passen...

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Makkelijkste manier in dit geval is denk ik een extra kolom 'sorteervolgorde' toe te voegen.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08-04 12:03

Janoz

Moderator Devschuur®

!litemod

In principe is dat de juiste output wanneer je alfabetisch sorteerd. een 1 komt immers voor een 2.

Je zou kunnen kijken naar natural sort of je naamgeving aanpassen zodat het wel fatsoenlijk sorteerd (voorloop nullen of extra spaties)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 10:46

Gonadan

Admin Beeld & Geluid, Harde Waren
Maak er 01 van :+ :P

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Komt er elke keer Boardroom voor te staan?, is dit gesorteerd voor een php script? Dan kan je boardroom in een variabele zetten en de kolom ID maken en op die manier wel goed sorteren.

en anders 01 van maken (zie hierboven) :D

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 19-03 14:02

Shezzie

Lekker hoor!

Als "Boardroom" inderdaad de prefix is, kun je wel wat goochelen:

SELECT Naam, CAST(substring(Naam, 10, 2) as integer) AS RoomNr
FROM <tabel>
ORDER BY RoomNr ASC

Bovengenoemde hernummering is trouwens wel beter :)

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 02-03 17:41
Nope, `naam` kan net zo goed "Magazijn", "Keuken" of "Zwembad 1" zijn.

Wordt met een PHP script uitgespuugd in een tabel:
PHP:
1
2
3
4
5
$result = mysql_query($query) or die ("Query mislukt!");
while ($gids = mysql_fetch_assoc($result))
{
blabla
}

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 10:46

Gonadan

Admin Beeld & Geluid, Harde Waren
Als je je verveelt kan je ook de strings die hij uitspuugd met regular expressions aan bewerken en zo de naam van de integer scheiden, trap dat in arrays en je kan sorteren, het is alleen wel een vieze en omslachtige methode. :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Thunk schreef op maandag 06 maart 2006 @ 13:06:
Nope, `naam` kan net zo goed "Magazijn", "Keuken" of "Zwembad 1" zijn.
wat je zou kunnen doen is het nummer in een extra kolom zetten, en indien er geen nummer is, dan is dat veld natuurlijk gewoon NULL :)

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 02-03 17:41
Ik voeg wel een 0 aan het getal toe... makkelijk opgelost.. niet de mooiste oplossing maar het werkt wel :)
Pagina: 1