Avatar billede JJ77 Juniormester
11. januar 2006 - 21:24 Der er 38 kommentarer og
1 løsning

udskrive bynavn ud fra postnr

Hej experter.
Er her nogle som ved hvordan man kan få et postnr til at blive til et bynavn når det bliver hentet ud fra databasen? hmmm. jeg har en tabel med nogle oplysninger, bla. et postnr, og når det så skal vises på en side, skal dette postnr. blive til et bynavn automatisk.. ;) ved ikke om jeg har udtrykt mig klart nok. Men kan det lade sig gøre?
Avatar billede wetdog Nybegynder
11. januar 2006 - 21:25 #1
har du en tabel som indeholder både postnr og bynavn kan det lade sig gøre. Mener man kan hente data fra postdanmarks hjemmeside
Avatar billede JJ77 Juniormester
11. januar 2006 - 21:54 #2
Jeg har nu fundet en fil med postnumre og bynavne.. det er i en exelfil.. hva fannn gør jeg så nu? den ser ud som nedenstående;)


Postnr.    Bynavn
555    Scanning
555    Scanning
800    Høje Taastrup
877    Valby
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:16 #3
har du en tabel med samme struktur kan excel filen gemmes i .csv format og loades ind i denne tabel med mysql funktionaliteten "LOAD DATA INFILE"

http://dev.mysql.com/doc/refman/4.1/en/load-data.html
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:20 #4
Fandt sq en fil som jeg havde liggende.. Nu håber jeg bare at den er opdateret, hvis der altså er kommet nye postnumre...;)
Men hvad gør jeg så nu... for at vende tilbage til hovedspørgsmålet?


Insert into postnr values(    0800    ,'Høje Taastrup');
Insert into postnr values(    0900    ,'København C');
Insert into postnr values(    1000    ,'København K');
Insert into postnr values(    1001    ,'København K');
Insert into postnr values(    1002    ,'København K');
Insert into postnr values(    1003    ,'København K');
Insert into postnr values(    1004    ,'København K');
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:22 #5
LOAD DATA INFILE din_excel_fil.csv INTO TABLE din_database_tabel FIELDS TERMINATED BY ;
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:23 #6
sorry - så ikke du var tilbage
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:23 #7
jeg har indsat postnr og by... men hvad gør jeg så nu? ;)
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:24 #8
hvad er det du gerne vil ? Har du noget PHP kode som skal modificeres, eller ?
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:26 #9
jeg har nedenstående kode som skal skrive et bynavn ud i stedet for selve postnummeret som den gør nu:)

<?php
require_once("../members/common.php");
//  Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", )
// str klip(str tekst, int længde, int tolerance)

function klip($tekst, $laengde = 200, $tolerance = 10) // $laengde og $tolerance kan udelades
{
    $punktum  = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum
    $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum
    $mere      = "..."; // punktummer hvis mere tekst

    if (strlen($tekst) <= $laengde + $tolerance) {
        $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance
        $mere = ""; // ikke andet
    } elseif ($punktum !== false) {
        $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum
    } elseif ($mellemrum !== false) {
        $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum
    } else {
        $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over)
    }

    return substr($tekst, 0, $slut_pos) . $mere; // udskriv del + evt. punktummer
}


// Hent først data ud
$resultat = mysql_query("select * from salgAfProdukt order by id DESC");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat)) {
  echo "
  <table width=\"560\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\" bgcolor=\"#F5F5F5\">
  <tr>
  <td width=\"360\" valign=\"top\"><span class=\"mellem\"><b> ".$raekke['produkt']."</b></span><br><span class=\"lille\">".klip($raekke['supplerendeTekst'])."</span></td>
  <td width=\"50\" valign=\"top\"><span class=\"mellem\">".$raekke['pris']."</span></td>
  <td width=\"150\" valign=\"top\"><span class=\"mellem\">".$raekke['postNr']."</span></td></tr></table>
<table width=\"560\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"bgcolor=\"#F5F5F5\">
            <tr>
                    <td><hr></td>
                </tr>
        </table>";
}

?>
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:36 #10
ja den var straks værre.. hva;) er det ikke noget med at den skal tjekke det postnr som den henter fra salgAfProdukt, og så henter det bynavn fra tabellen "bynavn" som passer til?
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:38 #11
hvis det er korrekt skal din sql sætning ændres til noget join
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:40 #12
ok.. men hvordan er det lige jeg gør det?
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:45 #13
måske sådan:

select * from salgAfProukt, din_database_tabel.bynavn left join din_database_tabel on salgAfProdukt.postnr = din_database_tabel.postnr order by id desc
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:48 #14
select * from salgAfProukt, din_database_tabel.bynavn as ny_bynavn left join din_database_tabel on salgAfProdukt.postnr = din_database_tabel.postnr order by id desc

og i din udskriftskode ændrer du $række['postnr'] til $række['ny_bynavn']

dette er ganske utestet :-)
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:51 #15
nu har jeg skrevet nedenstående.. hvad er galt? databasen hvor den henter det originale postnr(altså det som den skal finde en by ud fra) er tabellen "salgAfProdukt"....... tabellen som indeholder lister af postnr og bynavn hedder "postnr"

select * from salgAfProukt, postnr.bynavn left join postnr on salgAfProdukt.postnr = postnr.postnr order by id desc
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:52 #16
får du fejl på den ?
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:52 #17
men feltet postnummer i tabellen salgAfProdukt hedder postNr
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:53 #18
ja den virker ikke
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:55 #19
select * from salgAfProukt, postnr.bynavn as ny_bynavn left join din_database_tabel on salgAfProdukt.postNr = postnr.postnr order by id desc
Avatar billede JJ77 Juniormester
11. januar 2006 - 22:58 #20
hvad skal der stå i "din_database_tabel"

select * from salgAfProukt, postnr.bynavn as ny_bynavn left join din_database_tabel on salgAfProdukt.postNr = postnr.postnr order by id desc
Avatar billede wetdog Nybegynder
11. januar 2006 - 22:59 #21
postnr
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:00 #22
sådan ser mine tabeller ud;)

CREATE TABLE `postnr` (
  `postnr` mediumint(5) NOT NULL default '0',
  `bynavn` varchar(40) NOT NULL default ''
) TYPE=MyISAM;


CREATE TABLE `salgAfProdukt` (
  `Id` int(11) NOT NULL auto_increment,
  `userId` int(11) NOT NULL default '0',
  `kategori` varchar(65) NOT NULL default '',
  `produkt` varchar(65) NOT NULL default '',
  `supplerendeTekst` longtext NOT NULL,
  `pris` int(11) NOT NULL default '0',
  `loebetidForAnnonce` datetime NOT NULL default '0000-00-00 00:00:00',
  `billede` varchar(150) NOT NULL default '',
  `tlf1` int(20) NOT NULL default '0',
  `tlf2` int(20) NOT NULL default '0',
  `email` varchar(65) NOT NULL default '',
  `postNr` int(8) NOT NULL default '0',
  `checkbox` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`Id`)
) TYPE=MyISAM AUTO_INCREMENT=216 ;
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:01 #23
men er vi enige om at den skal kunne udskrive alle data som den plejer selv om jeg ikke har ændret "og i din udskriftskode ændrer du $række['postnr'] til $række['ny_bynavn']"
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:02 #24
select * from salgAfProukt, postnr.bynavn as ny_bynavn left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc

prøv denne
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:03 #25
gør den ikke det ?
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:04 #26
det virker stadig ikke.. hmm. min kode ser nu ud som følger:

<?php
require_once("../members/common.php");
//  Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", )
// str klip(str tekst, int længde, int tolerance)

function klip($tekst, $laengde = 200, $tolerance = 10) // $laengde og $tolerance kan udelades
{
    $punktum  = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum
    $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum
    $mere      = "..."; // punktummer hvis mere tekst

    if (strlen($tekst) <= $laengde + $tolerance) {
        $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance
        $mere = ""; // ikke andet
    } elseif ($punktum !== false) {
        $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum
    } elseif ($mellemrum !== false) {
        $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum
    } else {
        $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over)
    }

    return substr($tekst, 0, $slut_pos) . $mere; // udskriv del + evt. punktummer
}


// Hent først data ud
$resultat = mysql_query("select * from salgAfProukt, postnr.bynavn as ny_bynavn left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat)) {
  echo "
  <table width=\"560\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\" bgcolor=\"#F5F5F5\">
  <tr>
  <td width=\"360\" valign=\"top\"><span class=\"mellem\"><b> ".$raekke['produkt']."</b></span><br><span class=\"lille\">".klip($raekke['supplerendeTekst'])."</span></td>
  <td width=\"50\" valign=\"top\"><span class=\"mellem\">".$raekke['pris']."</span></td>
  <td width=\"150\" valign=\"top\"><span class=\"mellem\">".$raekke['ny_bynavn']."</span></td></tr></table>
<table width=\"560\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"bgcolor=\"#F5F5F5\">
            <tr>
                    <td><hr></td>
                </tr>
        </table>";
}

?>
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:05 #27
hvad viser din udskrift ?
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:08 #28
intet
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:11 #29
så er der en fejl i sql-sætningen - prøv

$resultat = mysql_query("select * from salgAfProukt, postnr.bynavn as ny_bynavn left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc") or die(mysql_error());
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:14 #30
SELECT command denied to user: 'softplanet_dk@localhost' for table 'bynavn'
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:15 #31
prøv så

$resultat = mysql_query("select * from salgAfProukt left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc") or die(mysql_error());
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:19 #32
Table 'softplanet_dk.salgAfProukt' doesn't exist
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:20 #33
$resultat = mysql_query("select * from salgAfProdukt, postnr left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc") or die(mysql_error());

hvis denne ikke virker har jeg ikke flere bud
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:21 #34
det var pga.. produkt var stavet forkert.. men nu udskriver den bare intet der hvor der skulle stå bynavn


$resultat = mysql_query("select * from salgAfProdukt left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc") or die(mysql_error());
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:23 #35
$resultat = mysql_query("select * from salgAfProdukt, postnr left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc") or die(mysql_error());

og i din udskriftskode ændrer du $række['ny_bynavn'] til $række['bynavn']
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:26 #36
YESSSSSSSSSSSSSSSSSSSSS.. nu virker det.. super duper.. hol da hel op... det var sku ikke en af de nemme. hva;) smider du ikke lige et svar.. og mange tak for hjælpen.
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:28 #37
sgu mange år siden jeg har arbejdet med join logik

samler ikke på point så tag dem bare selv - glad for jeg kunne hjælpe
Avatar billede JJ77 Juniormester
11. januar 2006 - 23:29 #38
hehe.. du er jo psyko.... nej jeg synes sq at du skal have de point, samler ell. ej. Det er fandme fortjent... ;)
Avatar billede wetdog Nybegynder
11. januar 2006 - 23:30 #39
ok - så  svaret og godnat
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester