|
| Sortere MySQL resultat Fra : Thomas Demant |
Dato : 14-03-06 20:53 |
|
Jeg har behov for at sortere resultatet, fra en MySQL database. Resultatet
skal dog først bearbejdes, med PHP.
Resultatet trækker jeg med mysql_fetch_array()-funktionen.
Lad os sige at tabellen består af 2 feltet: id, navn
Navnet laver jeg om, med explode()-funktionen, så det er formateret som
Demant, Thomas (efternavnet først).
Jeg har nu brug for at sortere alle mine resultater, alfabetisk efter
efternavnene.
Eks: Data i tabel
id navn
1 Thomas Demant
2 Thomas Øster
3 Bjarne Hansen
Eks: Resultat jeg vil vise på siden:
id navn
1 Demant, Thomas
3 Hansen, Bjarne
2 Øster, Thomas
Er der nogen der kan hjælpe med at lede mig på sporet af, hvordan jeg gør
det?
Jeg ville være tilfreds, hvis jeg kan få MySQL til at sortere resultatsættet
alfabetisk, ud fra det sidste ord i et af kolonnerne i tabellen. Men det går
jeg dog ikke ud fra kan lade sig gøre.
--
Thomas Demant
| |
Thomas JP (14-03-2006)
| Kommentar Fra : Thomas JP |
Dato : 14-03-06 22:07 |
|
On Tue, 14 Mar 2006 20:52:44 +0100, "Thomas Demant" <news@dement.dk>
wrote:
>Er der nogen der kan hjælpe med at lede mig på sporet af, hvordan jeg gør
>det?
>Jeg ville være tilfreds, hvis jeg kan få MySQL til at sortere resultatsættet
>alfabetisk, ud fra det sidste ord i et af kolonnerne i tabellen. Men det går
>jeg dog ikke ud fra kan lade sig gøre.
Er det ikke muligt for dig at dele din tabel op, så den også får et
felt til efternavnet. Det vil gøre det hele meget lettere/hurtigere.
--
Thomas
| |
Peter Brodersen (15-03-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 15-03-06 02:14 |
|
On Tue, 14 Mar 2006 20:52:44 +0100, "Thomas Demant" <news@dement.dk>
wrote:
>Jeg ville være tilfreds, hvis jeg kan få MySQL til at sortere resultatsættet
>alfabetisk, ud fra det sidste ord i et af kolonnerne i tabellen. Men det går
>jeg dog ikke ud fra kan lade sig gøre.
Det kan du godt (det er en database, og du kan trække enhver del af
dataen ud, og behandle tilsvarende), men designet vil ikke
nødvendigvis være hensigtsmæssigt. Jeg vil også anbefale at opdele i
fornavn og efternavn, idet fx "Sussi La Cour" lader til at skulle
sorteres under L og ikke C.
Men hvis det er en her-og-nu-operation, så er følgende måske en
mulighed:
Efternavnet kan vi finde med følgende udtryk: (som måske kan gøres
smartere):
RIGHT(navn,INSTR(REVERSE(navn)," ")-1)
Alt før kan vi så finde på følgende måde:
LEFT(navn,LENGTH(navn)-INSTR(REVERSE(navn)," "))
Kombineret:
SELECT id, CONCAT(RIGHT(navn,INSTR(REVERSE(navn)," ")-1), ", ",
LEFT(navn,LENGTH(navn)-INSTR(REVERSE(navn)," "))) AS navnsort
FROM tabel
ORDER BY navnsort
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Michael Zedeler (15-03-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 15-03-06 08:28 |
|
Peter Brodersen wrote:
> On Tue, 14 Mar 2006 20:52:44 +0100, "Thomas Demant" <news@dement.dk>
> wrote:
> [klip]
> Efternavnet kan vi finde med følgende udtryk: (som måske kan gøres
> smartere):
> [klip]
> RIGHT(navn,INSTR(REVERSE(navn)," ")-1)
>
> Alt før kan vi så finde på følgende måde:
> LEFT(navn,LENGTH(navn)-INSTR(REVERSE(navn)," "))
>
> Kombineret:
>
> SELECT id, CONCAT(RIGHT(navn,INSTR(REVERSE(navn)," ")-1), ", ",
> LEFT(navn,LENGTH(navn)-INSTR(REVERSE(navn)," "))) AS navnsort
> FROM tabel
> ORDER BY navnsort
Jeps. Brugen af REVERSE er temmeligt gakket. Det koster en masse ekstra,
hvor man blot kan beregne den rigtige position vha. LENGTH og INSTR.
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf
| |
Peter Brodersen (15-03-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 15-03-06 10:48 |
|
On Wed, 15 Mar 2006 08:28:27 +0100, Michael Zedeler
<michael@zedeler.dk> wrote:
>Jeps. Brugen af REVERSE er temmeligt gakket. Det koster en masse ekstra,
>hvor man blot kan beregne den rigtige position vha. LENGTH og INSTR.
Request for eksempel
Husk, at du skal tage højde for at et navn kan have flere mellemrum,
fx "Hans Jørgen Hansen".
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Michael Zedeler (15-03-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 15-03-06 11:01 |
|
Peter Brodersen wrote:
> On Wed, 15 Mar 2006 08:28:27 +0100, Michael Zedeler
> <michael@zedeler.dk> wrote:
>
>
>>Jeps. Brugen af REVERSE er temmeligt gakket. Det koster en masse ekstra,
>>hvor man blot kan beregne den rigtige position vha. LENGTH og INSTR.
>
> Request for eksempel
>
> Husk, at du skal tage højde for at et navn kan have flere mellemrum,
> fx "Hans Jørgen Hansen".
Citat fra manualen:
> It is also possible to use a negative value for pos. In this case,
> the beginning of the substring is pos characters from the end of
> the string, rather than the beginning. A negative value may be used
> for pos in any of the forms of this function.
Sådan er det næsten altid med streng-søgefunktioner. Hvis man angiver en
negativ startposition, søger de fra slutningen af strengen.
Så den del der finder efternavnet bliver til
RIGHT(navn,INSTR(navn," ",-1)-1)
(plus/minus 1)
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf
| |
Peter Brodersen (15-03-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 15-03-06 11:50 |
|
On Wed, 15 Mar 2006 11:01:18 +0100, Michael Zedeler
<michael@zedeler.dk> wrote:
>RIGHT(navn,INSTR(navn," ",-1)-1)
... men INSTR() tager stadigvæk kun to argumenter, så ovenstående
virker ikke.
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Michael Zedeler (15-03-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 15-03-06 13:15 |
|
Peter Brodersen wrote:
> On Wed, 15 Mar 2006 11:01:18 +0100, Michael Zedeler
> <michael@zedeler.dk> wrote:
>
>
>>RIGHT(navn,INSTR(navn," ",-1)-1)
>
>
> .. men INSTR() tager stadigvæk kun to argumenter, så ovenstående
> virker ikke.
Jeps. Beklager. Det gælder kun for SUBSTR, men ikke INSTR. MySQL har
(endnu en gang) unladt at implementere noget, som man helt indlysende
ville forvente at de havde. Suk.
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf
| |
Thomas Demant (20-03-2006)
| Kommentar Fra : Thomas Demant |
Dato : 20-03-06 20:08 |
|
> <SNIP>
Tak til alle for svarene. Jeg har opgivet at sortere med MySQL og lægger
istedet det hele ind i et multidimensionelt array, som jeg så sortere.
--
Thomas
| |
Peter Brodersen (20-03-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 20-03-06 20:13 |
|
On Mon, 20 Mar 2006 20:07:42 +0100, "Thomas Demant" <news@dement.dk>
wrote:
>Tak til alle for svarene. Jeg har opgivet at sortere med MySQL og lægger
>istedet det hele ind i et multidimensionelt array, som jeg så sortere.
Vi håber, du også overvejer at justere din datamodel
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Thomas Demant (24-03-2006)
| Kommentar Fra : Thomas Demant |
Dato : 24-03-06 14:35 |
|
> Vi håber, du også overvejer at justere din datamodel
Joo... det ville jeg da gerne. Det er desværre ikke en mulighed at lave det
om, da der er flere programmer om tabellen, hvor jeg kun har mulighed for at
ændre kildekode til webinterface og det ene af klientprogrammerne.
--
Thomas
| |
|
|