Toon posts:

[mysql]Order by met getallen klopt niet helemaal zoals ik wi

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een db met daarin een tekst veld waarin zowel tekst als getallen in staan, als ik sorteer dan krijg ik bv dit resultaat met getallen:
PHP:
1
$showprijs = mysql_query("SELECT omschrijvinguk, prijslaag, prijshoog FROM prijzen order by prijslaag asc");

Resultaat:
116
143
155
75
87

Echter wat ik wil is dat ie zo selecteerd:
75
87
116
143
155

Dus dat ie eerst op de enkelvouidige getallen sorteert, dan op de 2 voudige daarna op 3 etc.. en als laatste op de letters.
Ik heb al gezocht maar kan eigenlijk niets vinden wat dit doet, "desc" geeft ook hetzelfde probleem echter dan aflopend.

Wat is de juiste order by query om getallen via een "logische" oplopende manier te sorteren?

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 10:47
Volgens mij moet het werken als je in de order by converteert naar integers, dus:
code:
1
2
3
SELECT omschrijvinguk, prijslaag, prijshoog
FROM prijzen 
ORDER BY (prijslaag+0) ASC

[ Voor 7% gewijzigd door T-MOB op 02-06-2005 02:51 ]

Regeren is vooruitschuiven


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Laat me raden: het type van het veld dat je selecteert is een stringtype? ;)

Maak er eens een integerveld van in plaats van een (var)char, dan werkt het wel. Als dat niet kan (omdat misschien niet alle waarden in die kolom numeriek zijn), dan kun je eens een kijkje nemen in dit topic: [rml][ MySQL] Meerdere sort orders afhankelijk van content *[/rml], en dan met name de reacties van ACM. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Antediluvian
  • Registratie: Maart 2002
  • Laatst online: 04-05 10:30
Verwijderd schreef op donderdag 02 juni 2005 @ 02:27:
Wat is de juiste order by query om getallen via een "logische" oplopende manier te sorteren?
Je maakt gebruik van een tekst veld en niet van een numeriek veld dus de sortering die gebeurt is 100% logisch.

Je kan eventueel gebruik maken van leading nullen en deze wegschrijven naar je DB. Deze oplossing is zeker niet aan te raden want dit brengt ook een aantal problemen met zich mee. Zo mag het aantal leading nullen niet constant zijn. De volgende rij is nog steeds correct gesorteerd:
00116
0075
0087

Stel dat je het voor elkaar krijgt en dat je dus het correct aantal leading nullen ervoor plaatst tot een zo getallen bekomt met maximum 4 cijfers:
0075
0089
0116
5498

Het probeem is hier echter wanneer je een getal van 5 cijfers toevoegd:
0075
0089
0116
26549
5498

Volgens mij kan je best gebruik maken van een echt numeriek veld (zoals integer,decimal,..) ipv een tekstveld want een degelijk en eenvoudige oplossing bestaat (volgens mij) niet.

Je kan natuurlijk altijd die waarden inlezen in het geheugen en opslaan in een lijst van getallen en die dan in het geheugen sorteren :p dit raad je echter af want dit is gewoon rond je probleem werken en niet je probleem (design? ) oplossen.

Verwijderd

Topicstarter
Het probleem is dat er getallen EN teksten moeten worden opgeslagen in de tabel waarop ik wil sorteren. Dus een numeriek veld gebruiken is helaas niet mogelijk.

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:59
Wat bewaar je dan zoal in dat veld ?

https://fgheysels.github.io/


  • Zoefff
  • Registratie: September 2001
  • Laatst online: 06-05 23:07

Zoefff

❤ 

Verwijderd schreef op zaterdag 04 juni 2005 @ 14:54:
Het probleem is dat er getallen EN teksten moeten worden opgeslagen in de tabel waarop ik wil sorteren. Dus een numeriek veld gebruiken is helaas niet mogelijk.
Wellicht kan je dan, nadat je de waarden hebt opgehaald uit de database, de boel sorteren met natsort() :)


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zaterdag 04 juni 2005 @ 14:54:
Het probleem is dat er getallen EN teksten moeten worden opgeslagen in de tabel waarop ik wil sorteren. Dus een numeriek veld gebruiken is helaas niet mogelijk.
-NMe- schreef op donderdag 02 juni 2005 @ 02:56:
Maak er eens een integerveld van in plaats van een (var)char, dan werkt het wel. Als dat niet kan (omdat misschien niet alle waarden in die kolom numeriek zijn), dan kun je eens een kijkje nemen in dit topic: [rml][ MySQL] Meerdere sort orders afhankelijk van content *[/rml], en dan met name de reacties van ACM. :)
Dus. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-05 14:03

curry684

left part of the evil twins

Verwijderd schreef op zaterdag 04 juni 2005 @ 14:54:
Het probleem is dat er getallen EN teksten moeten worden opgeslagen in de tabel waarop ik wil sorteren. Dus een numeriek veld gebruiken is helaas niet mogelijk.
* curry684 voelt een DB in 0NV aan ergens in de verte...

Professionele website nodig?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

curry684 schreef op zondag 05 juni 2005 @ 03:41:
* curry684 voelt een DB in 0NV aan ergens in de verte...
Hoeft niet per se. :) Zie ook het topic waar ik hierboven naar link waarin de TS typen auto's kwijt moest in een veld en het vervolgens wilde sorteren. Het kan dus wel degelijk. :P

Al vraag ik me wel af hoe een veld 'prijslaag' (prijs -> bedrag -> getal) een tekst kan bevatten. Het is toch gewoon een veld dat alleen bedragen moet kunnen verwerken? Dan voldoet een decimal (of misschien zelfs een int) prima. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:59
-NMe- schreef op zondag 05 juni 2005 @ 04:32:
[...]

Al vraag ik me wel af hoe een veld 'prijslaag' (prijs -> bedrag -> getal) een tekst kan bevatten. Het is toch gewoon een veld dat alleen bedragen moet kunnen verwerken? Dan voldoet een decimal (of misschien zelfs een int) prima. :)
Dat vraag ik me ook af; vandaar mijn vraag eerder in dit topic.
En daardoor denk ik ook dat curry er nog zo ver niet zal naast zitten.

[ Voor 9% gewijzigd door whoami op 05-06-2005 10:30 ]

https://fgheysels.github.io/

Pagina: 1