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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste