Avatar billede subcubes Nybegynder
23. september 2001 - 18:13 Der er 6 kommentarer og
2 løsninger

Sæt bynavn ind ved post nummer

Hej - jeg har en database der er bygget sådan her op:
CREATE TABLE data (
  id int(10) DEFAULT \'0\' NOT NULL auto_increment,
  navn varchar(100) NOT NULL,
  att varchar(100) NOT NULL,
  adresse varchar(100) NOT NULL,
  postnr varchar(100) NOT NULL,
  bynavn varchar(100) NOT NULL,
  telefon1 varchar(100) NOT NULL,
  telefon2 varchar(100) NOT NULL,
  fax varchar(100) NOT NULL,
  email varchar(100) NOT NULL,
  saelger varchar(100) NOT NULL,
  booket varchar(10) NOT NULL,
  besoeg date DEFAULT \'0000-00-00\' NOT NULL,
  aftaltmed varchar(100) NOT NULL,
  tid varchar(10) NOT NULL,
  besked varchar(255) NOT NULL,
  ny char(2) NOT NULL,
  nydato varchar(25) NOT NULL,
  emne varchar(50) NOT NULL,
  PRIMARY KEY (id)
);

Og en der er bygget sådan her op:

CREATE TABLE dk_postnr (
  postnr varchar(100) NOT NULL,
  bynavn varchar(100) NOT NULL
);

I den første har jeg en masse post numre, men ingen bynavne... I den anden har jeg en masse postnumre, og en masse bynavne... - Hvordan kan jeg smide alle bynavnene over i den første, så de kommer til at lægge i de rigtige rækker !

Hvis der var nogen der forstod det :)
Avatar billede alvion Nybegynder
23. september 2001 - 18:18 #1
Det skal du slet ikke gøre. Ideen med din nuværende opsplitning er at undgå redundans (= de samme data flere steder). Istedet skal du sammensætte data fra begge tabeller på udtrækningstidspunktet.

Slet feltet \"bynavn\" fra den første tabel, og lav fremover dine opslag således

SELECT data.*, dk_postnr.bynavn
FROM data LEFT JOIN dk_postnr ON data.postnr = dk_postnr.postnr
WHERE ... (dine normale where-betingelser)
Avatar billede subcubes Nybegynder
23. september 2001 - 18:20 #2
Alvion: Det er den måde jeg bruger nu, ca. Men ideén med det andet, var at slette nr. 2 tabel. Det det sløver meget for hver jeg laver ! Hvis jeg gør det på den nye måde, skal jeg kun lave en enkelt query... !
Avatar billede drweberdk Nybegynder
23. september 2001 - 18:21 #3
I mySQL kan du vælge at hente en sammenlagt liste således \"SELECT * from data, dk_postnr WHERE data.postnr = dk_postnr.postnr ;\"

Så skulle alle informationerne omkring de to tabeller gerne blive vist med bynavnene i sidste kolonne.

Jeg vil råde dig til at lave en funktion der kan oplyse dig om hvilken by der hører til et bestemt postnummer . Således behøver du kun at sætte funktionen ind når du echoer et postnummer.

echo(postnr(\"2620\"));  //spytter Albertslund ud.

God fornøjelse...
Avatar billede subcubes Nybegynder
23. september 2001 - 18:23 #4
Jeg havde forestillet mig en eller anden smart løkke, der løb i gennem for hver række og lavede en UPDATE, så tabel nr. 1 kom til at passe... Hvordan kunne sådan en løkke se ud ?
Avatar billede drweberdk Nybegynder
23. september 2001 - 18:26 #5
beats me...
Avatar billede myplacedk Nybegynder
23. september 2001 - 22:15 #6
subcubes >> Det ER altså en dårlig ide at slå de to tabeller sammen. At gøre det på den måde, som du gør nu, er hele grund-princippet i relationsdatabaser!
Hvis den smule opdeling sløver mærkbart, så tror jeg altså du gør et eller andet galt.

Men ellers:
Hvis det er med MySQL tror jeg ikke du kan slå dem sammen direkte i en query. Det må vist kræve en sub-query, hvilket MySQL vist ikke kan klare. Men hvis det var det du ville, havde du jo naturligvis ikke spurgt i PHP-gruppen.

Men en PHP-løsning er da temmelig simpel?

1. hent `id` og `postnr` fra tabellen `data` og det tilhørende bynavn fra `dk_postnr`.
2. for hver række i punkt et køres en UPDATE.


/Niels Andersen
Avatar billede subcubes Nybegynder
24. september 2001 - 00:37 #7
myplacedk: Du for lidt, ideén var der men ikke resultatet...


/Torben Lajer
Avatar billede myplacedk Nybegynder
24. september 2001 - 04:49 #8
Æhh... Ville du have hjælp, eller skulle vi gøre det for dig?

Jeg hjælper gratis i både fritid og arbejdstid, men at gøre arbejdet for andre, det lever jeg af! :)

/Niels Andersen
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