23. september 2001 - 18:13Der 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 !
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)
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... !
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.
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 ?
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.
Æ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
Synes godt om
Ny brugerNybegynder
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.