|
| Æ, Ø, Å?!? 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"> </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/
| |
|
|