/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Nummerrigtig sortering med ORDER BY felt D~
Fra : Kasper Johansen


Dato : 24-08-05 06:56

Hej gruppe.

Når man sortere med overstående, vil sorteringen typisk blive helt rigtig,
altså et felt indeholdene 80GB vil blive sorteret efter et felt med 120GB.

Er det muligt at ændre overstående, til en mere intelligent og brugervenlig
sortering, således at 80GB bliver sorteret først? Og hvordan?

Det er tekst-strenge med harddiske, hvis nogen ikke allerede har gættet det
:)


Jeg bruger MySQL 3,23, PHP4 og Apache 1,3.


--
Mvh Kasper Johansen



 
 
Troels Arvin (24-08-2005)
Kommentar
Fra : Troels Arvin


Dato : 24-08-05 08:46

On Wed, 24 Aug 2005 07:55:30 +0200, Kasper Johansen wrote:

> Når man sortere med overstående, vil sorteringen typisk blive helt rigtig,
> altså et felt indeholdene 80GB vil blive sorteret efter et felt med 120GB.
>
> Er det muligt at ændre overstående, til en mere intelligent og brugervenlig
> sortering, således at 80GB bliver sorteret først? Og hvordan?

Du kan vælge at benytte en numerisk datatype for din kolonne.

Alternativt skal du ud i noget gris (der bl.a. er grisset, fordi det
kan risikere at få dit query til at gå ekstremt langsomt), som måske
involverer

ORDER BY (LPAD(colname,10,'0'))

Erstat 10 med max-længden af "colname"-kolonnen.

--
Greetings from Troels Arvin


Peter Lykkegaard (24-08-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 24-08-05 09:42

"Troels Arvin" wrote
>
> Alternativt skal du ud i noget gris (der bl.a. er grisset, fordi det
> kan risikere at få dit query til at gå ekstremt langsomt), som måske
> involverer
>
> ORDER BY (LPAD(colname,10,'0'))
>
Alternativt kan man gemme data med foranstillede nuller
Sådan arbejder nogle ERP systemer

(Nullerne bliver strippet i præsentationslaget)

- Peter



Peter Brodersen (25-08-2005)
Kommentar
Fra : Peter Brodersen


Dato : 25-08-05 15:59

On Wed, 24 Aug 2005 09:45:32 +0200, Troels Arvin <troels@arvin.dk>
wrote:

>ORDER BY (LPAD(colname,10,'0'))
>
>Erstat 10 med max-længden af "colname"-kolonnen.

En hurtig cast (direkte eller implicit) er også en mulighed, fx:

ORDER BY colname+0

Fordelen er, at der her også tages højde for evt. indledende
blanktegn, samt blanktegn mellem tallet og GB.

Ved LPAD vil '5 GB', '6GB', '7 GB' ikke blive sorteret korrekt -
og ' 8 GB' vil også blive sorteret først pga. det indledende
mellemrum.

--
- Peter Brodersen

Martin (24-08-2005)
Kommentar
Fra : Martin


Dato : 24-08-05 23:51

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Kasper Johansen wrote:
> Hej gruppe.
>
> Når man sortere med overstående, vil sorteringen typisk blive helt rigtig,
> altså et felt indeholdene 80GB vil blive sorteret efter et felt med 120GB.
>
> Er det muligt at ændre overstående, til en mere intelligent og brugervenlig
> sortering, således at 80GB bliver sorteret først? Og hvordan?
>
> Det er tekst-strenge med harddiske, hvis nogen ikke allerede har gættet det
> :)

Jeg ville nok smide GB væk fra feltet også lave feltet til et nummerisk
(int) felt.

Også kan du måske i et andet felt lave et størrelse felt, som relatere
til en en anden tabel hvor der er sortering på GB, MB osv.

Fx

Tabel - Harddiske
id (int) auto_increment
type (text)
size_of_disc (int)
type_of_size (int) (referer til næste tabel)

Tabel - Harddisk_sizes
id (int) auto_increment
sizename (text)
sortering (int)

Så kan man lave at fx
80 mb kommer EFTER 10 gb, da 10 gb jo er større end 80mb :)

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)

iD8DBQFDDPnbAxDV/8Li8MYRAncRAJ4pO/NGi4cj7DwxJeNVnd75g7TGiQCfXogp
M6TXAYT9JGiR2EL9mJxKWKM=
=IRpj
-----END PGP SIGNATURE-----

Kasper Johansen (25-08-2005)
Kommentar
Fra : Kasper Johansen


Dato : 25-08-05 12:01

"Martin" <news@natten-i.dk> skrev i en meddelelse
news:430cf9c8$0$76163$edfadb0f@dread16.news.tele.dk...
> Jeg ville nok smide GB væk fra feltet også lave feltet til et nummerisk
> (int) felt.
>
> Også kan du måske i et andet felt lave et størrelse felt, som relatere
> til en en anden tabel hvor der er sortering på GB, MB osv.
>
> Fx
>
> Tabel - Harddiske
> id (int) auto_increment
> type (text)
> size_of_disc (int)
> type_of_size (int) (referer til næste tabel)
>
> Tabel - Harddisk_sizes
> id (int) auto_increment
> sizename (text)
> sortering (int)
>
> Så kan man lave at fx
> 80 mb kommer EFTER 10 gb, da 10 gb jo er større end 80mb :)

Det er et tekst-felt i en varedatabase, hvor en af grupperne bare er
harddiske, så jeg har ikke mulighed for at lave en decideret tabel til
harddiske.

Er der virkelig ikke en dejlig let funktion til at sortere efter de
naturlige numre i MySQL???


--
Mvh Kasper Johansen



Peter Lykkegaard (25-08-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 25-08-05 13:19

"Kasper Johansen" wrote

> Det er et tekst-felt i en varedatabase, hvor en af grupperne bare er
> harddiske, så jeg har ikke mulighed for at lave en decideret tabel til
> harddiske.
>
Der indeholder fx "10 Gb", "100 Gb" eller "360 Gb" ?

> Er der virkelig ikke en dejlig let funktion til at sortere efter de
> naturlige numre i MySQL???
>
Den eneste metode er den Troels anviste

- Peter



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste