|
| 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
| |
|
|