/ 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
Æ, Ø, Å?!?
Fra : Jesper


Dato : 06-12-05 15:23

Jeg har lavet dette script til at vise byer i alfabetisk rækkefølge, men det
fungerer ikke helt... Hvis en by som med Aa istedet for Å kommer disse byer
ind under A. Hvordan løser jeg dette?

Scriptet er som følger.


<?php

$dbhost = 'min_host';
$dbuser = 'mit_brugernavn';
$dbpass = 'mit_password';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die
('Error connecting to mysql');

$dbname = 'min_database';
mysql_select_db($dbname);



$query = "SELECT ID, bynavn, bylink FROM byer ORDER BY bynavn ASC";
$result = mysql_query($query);
$byer = array();
while($r = mysql_fetch_row($result)) {
$byer[] = array('id'=>$r[0],'bynavn'=>$r[1],'bylink'=>$r[2]);
}

$antalKolonner = 3;
$antalbyer = mysql_num_rows($result); //Antallet af byer

$antalKlubberPrKolonne = ceil($antalbyer/$antalKolonner);
?>

<table>
<tr>
<?php
$currLetter = '';
$c = 0;
for($i=0;$i<$antalKolonner;$i++) {
echo '<td width="33%" valign="top">';
for($x=0;$x<$antalbyerPrKolonne;$x++) {
if(!isset($byer[$c])) { break; }

if($byer[$c]['bynavn']{0} != $currLetter) {
            if($x!=0) { echo '<br>'; }
            echo '<img
src="img/standard/bogstaver/index-'.strtolower($byer[$c]['navn']{0}).'.gif"
alt="" /><br>';
//echo $byer[$c]['bynavn']{0}.'-GIF!<br />';
$currLetter = $byer[$c]['bynavn']{0};
}
echo '<a
href="'.$byer[$c]['bylink'].'">'.$byer[$c]['bynavn'].'</a>';
echo '<br>';
$c++;
}
echo '</td>';
}
?>
</tr>
<tr>
<td height="60">&nbsp;</td>
</tr>
</table>

Tak på forhånd



 
 
Mikkel Z. Herold (06-12-2005)
Kommentar
Fra : Mikkel Z. Herold


Dato : 06-12-05 15:35

On 06-12-2005 15:23 Jesper wrote:
> Jeg har lavet dette script til at vise byer i alfabetisk rækkefølge, men det
> fungerer ikke helt... Hvis en by som med Aa istedet for Å kommer disse byer
> ind under A. Hvordan løser jeg dette?

Ved ikke om det virker, men prøv at tilføje "setlocale (LC_ALL,
'da_DK');" (uden anførselstegn) øverst i dit script, og brug så
funktionen 'sort' (se http://dk2.php.net/manual/en/function.sort.php)
til at sortere dit array med byer før du begynder at udskrive dem.

Iflg. manualen (linket ovenfor) kan man angive nogle sorteringsparametre
for funktionen, bl.a. "SORT_LOCALE_STRING", som skulle "compare items as
strings, based on the current locale".

Mikkel

--
"At first just a rustle of canvas
And the gentlest breath on my face
But a galloping line of white horses
Said that soon we were in for a race"
Sting - The Wild Wild Sea

http://www.mzh.dk

Jesper (06-12-2005)
Kommentar
Fra : Jesper


Dato : 06-12-05 16:14

Tak for hjælpen Mikkel, men det dutter ikke... Har allerede prøvet dette...
Der må sgu' da være en måde at løse dette problem... HJÆÆÆÆLP?!?!

> Ved ikke om det virker, men prøv at tilføje "setlocale (LC_ALL, 'da_DK');"
> (uden anførselstegn) øverst i dit script, og brug så funktionen 'sort' (se
> http://dk2.php.net/manual/en/function.sort.php) til at sortere dit array
> med byer før du begynder at udskrive dem.
>
> Iflg. manualen (linket ovenfor) kan man angive nogle sorteringsparametre
> for funktionen, bl.a. "SORT_LOCALE_STRING", som skulle "compare items as
> strings, based on the current locale".
>
> Mikkel



Tommy Ipsen (06-12-2005)
Kommentar
Fra : Tommy Ipsen


Dato : 06-12-05 14:50

Hej

Jesper wrote:
> Jeg har lavet dette script til at vise byer i alfabetisk rækkefølge, men det
> fungerer ikke helt... Hvis en by som med Aa istedet for Å kommer disse byer
> ind under A. Hvordan løser jeg dette?
>
> Scriptet er som følger.
> ...
> $query = "SELECT ID, bynavn, bylink FROM byer ORDER BY bynavn ASC";
> $result = mysql_query($query);

Du kan læse mere om hvordan MySQL styrer sortering:

http://dev.mysql.com/doc/refman/4.1/en/character-sets.html

Mvh Tommy

Michael Zedeler (06-12-2005)
Kommentar
Fra : Michael Zedeler


Dato : 06-12-05 15:53

Hej Jesper.

Jesper wrote:
> Jeg har lavet dette script til at vise byer i alfabetisk rækkefølge, men det
> fungerer ikke helt... Hvis en by som med Aa istedet for Å kommer disse byer
> ind under A. Hvordan løser jeg dette?
>
> Scriptet er som følger.
>
> <?php [klip]
> $query = "SELECT ID, bynavn, bylink FROM byer ORDER BY bynavn ASC";
> $result = mysql_query($query);
> [klip] ?>

Data kommer fra databasen, som er mysql. Ergo: dit spørgsmål drejer sig
om mysql og ikke php.

Mit gæt er at du glemt at fortælle mysql at den skal sortere efter
iso-8859-1 også kendt som latin1. Det kan man gøre når man opretter
databasen:

http://dev.mysql.com/doc/refman/5.1/en/create-database.html

men det ser også ud til at være muligt at redde med en COLLATE BY, omend
jeg ikke vil anbefale det og ikke har prøvet det:

http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html

Mvh. Michael.

FUT: dk.edb.database
--
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

Jesper (06-12-2005)
Kommentar
Fra : Jesper


Dato : 06-12-05 21:32

Hej Michael. Databasen er sat til iso-8859-1, så den vej kunne det ikke
løses... Jeg prøvede så med COLLATE BY... Heller ikke dette hjalp. Hva' faen
skal man så gøre. Er DESPERAT!!!

"Michael Zedeler" <michael@zedeler.dk> skrev i en meddelelse
news:oBhlf.2109$Cl2.42346@news000.worldonline.dk...
> Hej Jesper.
> Data kommer fra databasen, som er mysql. Ergo: dit spørgsmål drejer sig om
> mysql og ikke php.
>
> Mit gæt er at du glemt at fortælle mysql at den skal sortere efter
> iso-8859-1 også kendt som latin1. Det kan man gøre når man opretter
> databasen:
>
> http://dev.mysql.com/doc/refman/5.1/en/create-database.html
>
> men det ser også ud til at være muligt at redde med en COLLATE BY, omend
> jeg ikke vil anbefale det og ikke har prøvet det:
>
> http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html
>
> Mvh. Michael.
>
> FUT: dk.edb.database
> --
> 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 (06-12-2005)
Kommentar
Fra : Peter Brodersen


Dato : 06-12-05 21:52

On Tue, 6 Dec 2005 21:31:31 +0100, "Jesper" <jesper@mansa.dk> wrote:

>Hej Michael. Databasen er sat til iso-8859-1, så den vej kunne det ikke
>løses... Jeg prøvede så med COLLATE BY... Heller ikke dette hjalp. Hva' faen
>skal man så gøre. Er DESPERAT!!!

Hvad har du mere præcist prøvet? Vis os din query.

--
- Peter Brodersen

Bertel Lund Hansen (06-12-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 06-12-05 22:05

Michael Zedeler skrev:

> Mit gæt er at du glemt at fortælle mysql at den skal sortere efter
> iso-8859-1 også kendt som latin1.

Det ændrer da ikke på at aa kommer allerførst i alfabetet. Det er
ikke en del af ISO-8859-1 at aa er et specielt dansk bogstav der
skal sorteres til sidst.

Fut ikke fulgt fordi min kommentar ikke er databaserelateret.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Peter Brodersen (06-12-2005)
Kommentar
Fra : Peter Brodersen


Dato : 06-12-05 22:10

On Tue, 6 Dec 2005 22:05:29 +0100, Bertel Lund Hansen
<nospamfilius@lundhansen.dk> wrote:

>Det ændrer da ikke på at aa kommer allerførst i alfabetet. Det er
>ikke en del af ISO-8859-1 at aa er et specielt dansk bogstav der
>skal sorteres til sidst.

Ikke direkte relateret til den oprindelige spørger, men hvis det viser
sig at æøå i øvrigt bliver sorteret "forkert" (hvilket de gør, hvis
man blot benytter sig af iso-8859-1 og ikke angiver en dansk
collation), kan det så ligeledes ordnes i forespørgslen.

Fx:

SELECT ID, bynavn, bylink FROM byer ORDER BY REPLACE(bynavn,'aa','å')
COLLATE latin1_danish_ci

--
- Peter Brodersen

Michael Zedeler (07-12-2005)
Kommentar
Fra : Michael Zedeler


Dato : 07-12-05 00:24

Bertel Lund Hansen wrote:
> Michael Zedeler skrev:
>
>
>>Mit gæt er at du glemt at fortælle mysql at den skal sortere efter
>>iso-8859-1 også kendt som latin1.
>
>
> Det ændrer da ikke på at aa kommer allerførst i alfabetet. Det er
> ikke en del af ISO-8859-1 at aa er et specielt dansk bogstav der
> skal sorteres til sidst.
>
> Fut ikke fulgt fordi min kommentar ikke er databaserelateret.

DUH. Jeg græmmes. Så kan jeg lære at læse folks spørgsmål noget grundigere.

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

Thorbjørn Ravn Ander~ (06-12-2005)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 06-12-05 23:40

Michael Zedeler <michael@zedeler.dk> writes:

> > men det fungerer ikke helt... Hvis en by som med Aa istedet for Å
> > kommer disse byer ind under A. Hvordan løser jeg dette?

Det er ikke et tegnsætsproblem men et "sproget er dansk"-problem
(locale).

Hvis databasen ikke understøtter dansk sortering, er du nok nødt til
at se om du kan få php til det, og så sortere resultatet fra
databasen.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn/

Bertel Lund Hansen (06-12-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 06-12-05 22:03

Jesper skrev:

> Jeg har lavet dette script til at vise byer i alfabetisk rækkefølge, men det
> fungerer ikke helt... Hvis en by som med Aa istedet for Å kommer disse byer
> ind under A. Hvordan løser jeg dette?

Jeg har løst et lignende problem ved at oprette et ekstra array,
sortnames, hvor jeg så starter med at kopiere de rigtige navne
over og bagefter udskifter "aa" med "å". Det er ikke helt
vandtæt, men er Godt Nok i praksis.

PHP har kommandoer til at multisortere så de to arrays er
synkrone.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Peter Brodersen (06-12-2005)
Kommentar
Fra : Peter Brodersen


Dato : 06-12-05 22:08

On Tue, 6 Dec 2005 15:23:00 +0100, "Jesper" <jesper@mansa.dk> wrote:

>$query = "SELECT ID, bynavn, bylink FROM byer ORDER BY bynavn ASC";

En quick'n'dirty udskiftning:

>$query = "SELECT ID, bynavn, bylink FROM byer ORDER BY REPLACE(bynavn,'aa','å') ASC";

Hvis du har ekstremt mange byer, kan du overveje at have et ekstra
felt med replace-informationen og indeksere den, så den ikke skal
sortere bynavnene hver gang. I praksis er det nok ikke noget problem.

--
- Peter Brodersen

Jesper (06-12-2005)
Kommentar
Fra : Jesper


Dato : 06-12-05 22:33

"Peter Brodersen" <usenet2005@ter.dk> skrev i en meddelelse
news:dn4ujl$j27$1@news.klen.dk...
> On Tue, 6 Dec 2005 15:23:00 +0100, "Jesper" <jesper@mansa.dk> wrote:
>
>>$query = "SELECT ID, bynavn, bylink FROM byer ORDER BY bynavn ASC";
>
> En quick'n'dirty udskiftning:
>
>>$query = "SELECT ID, bynavn, bylink FROM byer ORDER BY
>>REPLACE(bynavn,'aa','å') ASC";
>
> Hvis du har ekstremt mange byer, kan du overveje at have et ekstra
> felt med replace-informationen og indeksere den, så den ikke skal
> sortere bynavnene hver gang. I praksis er det nok ikke noget problem.
>
> --
> - Peter Brodersen

Umiddelbart lignede det en løsning, da jeg ikke havde prøvet den før, men
der skete intet... Det blev bare det samme... Andre gode ideer?



Peter Brodersen (07-12-2005)
Kommentar
Fra : Peter Brodersen


Dato : 07-12-05 00:04

On Tue, 6 Dec 2005 22:32:31 +0100, "Jesper" <jesper@mansa.dk> wrote:

>>>$query = "SELECT ID, bynavn, bylink FROM byer ORDER BY
>>>REPLACE(bynavn,'aa','å') ASC";
>>
>Umiddelbart lignede det en løsning, da jeg ikke havde prøvet den før, men
>der skete intet... Det blev bare det samme... Andre gode ideer?

Ah, sandsynligvis er det fordi der skelnes mellem store og små
bogstaver. Så "Aalborg" vil ikke blive til "ålborg" ifbm. sorteringen,
og "Aabenraa" vil blive til "Aabenrå".

Næste bud, hvor vi konverterer bynavnet (i den udgave, vi sorterer
efter) til småt:

$query = "SELECT ID, bynavn, bylink FROM byer ORDER BY
REPLACE(LOWER(bynavn),'aa','å') ASC";

--
- Peter Brodersen

Michael Zedeler (07-12-2005)
Kommentar
Fra : Michael Zedeler


Dato : 07-12-05 00:33

Jesper wrote:
> Jeg har lavet dette script til at vise byer i alfabetisk rækkefølge, men det
> fungerer ikke helt... Hvis en by som med Aa istedet for Å kommer disse byer
> ind under A. Hvordan løser jeg dette?
> [klip]
> $query = "SELECT ID, bynavn, bylink FROM byer ORDER BY bynavn ASC";

Beklager at jeg skrev at det var databaserelateret uden helt at give den
rigtige løsning. Det kan godt løses i databasen alene, så her er mit
forslag:

SELECT ID, bynavn, bylink, CASE LEFT(bynavn,2) WHEN 'Aa' THEN 1 ELSE 0
END AS aadetect
FROM byer
ORDER BY aadetect, bynavn;

Forslaget er testet. Desuden kan du udvide den så den endda også kan
tage højde for "ae" og "oe", men det regner jeg ikke med at du får brug
for lige foreløbig.

Så ja - det kunne laves rent i databasen, men jeg indrømmer at der
skulle mere til, end det jeg foreslog.

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

Arne Feldborg (07-12-2005)
Kommentar
Fra : Arne Feldborg


Dato : 07-12-05 00:45

"Jesper" <jesper@mansa.dk> skrev Tue, 6 Dec 2005 15:23:00 +0100

>Jeg har lavet dette script til at vise byer i alfabetisk rækkefølge, men det
>fungerer ikke helt... Hvis en by som med Aa istedet for Å kommer disse byer
>ind under A. Hvordan løser jeg dette?
>
Feks med noget a'la det her:

$sql = "SELECT place, replace(place,'Aa','Å') AS sortering from
$tabel[place] group by place order by sortering";
   
--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

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

Månedens bedste
Årets bedste
Sidste års bedste