iChristian Skrevet 3. mars 2012 Del Skrevet 3. mars 2012 Jeg arbeider med å overføre CVen min fra en statisk html-side til en database-drevet side. Ikke det at jeg trenger det, men for moro og læringen. Problemet mitt er at jeg har flere referanser som hører til flere forskjellige CV-poster. For å kunne hente frem referansene til en bestemt jobb så må jeg kunne ha en kobling til IDen til alle de forskjellige jobbene som hører sammen med den aktuelle referansen. Hvordan bør jeg gå frem for å gjøre det? Det bør kanskje nevnes at for enkelte av jobbene så har jeg også flere referanser slik at å flytte koblingsproblemet over til tabellen for jobbene ikke nødvendigvis løser problemet. Lenke til kommentar
JohndoeMAKT Skrevet 3. mars 2012 Del Skrevet 3. mars 2012 (endret) En enkel løsning: jobs: [id, data1, data2] references: [id, data1, data2] job_reference: [job_id, reference_id] insert into jobs values (1, 'x1', 'y1'), (2, 'x2', 'y2'); insert into references(1, 'x3', 'y3'); insert into job_reference values (1, 1), (2, 1); select * from references where job_id = 1; select * from references where job_id = 2; ^ Disse to spørringene returnerer samme referanse. Endret 3. mars 2012 av JohndoeMAKT Lenke til kommentar
iChristian Skrevet 3. mars 2012 Forfatter Del Skrevet 3. mars 2012 Kunne du gi meg hele "hentekoden"? Fordi jeg skjønner ikke hvordan den klarer å sette de to tabellene i sammenheng. Lenke til kommentar
JohndoeMAKT Skrevet 3. mars 2012 Del Skrevet 3. mars 2012 Du har én tabell _kun_ med jobber og én tabell _kun_ med referanser. Så lager du en "join tabell" mellom de to som for hver rad kun inneholder ID-en til én jobb og én referanse. Lag de tabellene og lim inn "show create table" her, så kan jeg svare. Lenke til kommentar
quantum Skrevet 3. mars 2012 Del Skrevet 3. mars 2012 select * from jobs j left join job_references jr on j.id = jr.job_id inner join references r on jr.reference_id = r.id where blababla ... select * from references r left join job_references jr on r.id = jr.refenrece_id inner join jobs r on jr.job_id = j.id where blablabla ... pointet med left join i den første spørringen er at du da får med jobber du ikke har referanser til (inner join vil utelukke rader i jobs hvor det ikke er noen kobling til job_references). ditto i den andre spørringen, left join tar med referanser du ikke har jobbet for ... men den varianten er kanskje ikke så aktuell... du bør også legge på fremmednøkkelbegrensninger slik at det ikke er mulig å ha rader i job_references som peker til slettede rader i jobs eller references. (google "foreign key constraint"). mht. overskriften din så er det altså snakk om to tabeller, ikke to databaser. Lenke til kommentar
iChristian Skrevet 3. mars 2012 Forfatter Del Skrevet 3. mars 2012 Du har én tabell _kun_ med jobber og én tabell _kun_ med referanser. Så lager du en "join tabell" mellom de to som for hver rad kun inneholder ID-en til én jobb og én referanse. Lag de tabellene og lim inn "show create table" her, så kan jeg svare. Her er de tre relevante tabellene mine: CREATE TABLE IF NOT EXISTS `Jobref` ( `id` int(3) NOT NULL AUTO_INCREMENT, `job_id` int(3) NOT NULL, `ref_id` int(3) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `Referanser` ( `id` int(11) NOT NULL AUTO_INCREMENT, `Fornavn` varchar(26) COLLATE utf8_unicode_ci NOT NULL, `Etternavn` varchar(25) COLLATE utf8_unicode_ci NOT NULL, `Bedrift` varchar(60) COLLATE utf8_unicode_ci NOT NULL, `Stilling` varchar(40) COLLATE utf8_unicode_ci NOT NULL, `Telefon` mediumint(20) NOT NULL, `E-post` text COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `Yrker` ( `id` mediumint(4) NOT NULL AUTO_INCREMENT, `mndstart` tinyint(2) NOT NULL, `yearstart` year(4) NOT NULL, `mndslutt` tinyint(2) DEFAULT NULL, `yearslutt` year(4) DEFAULT NULL, `arbeidsplass` text COLLATE utf8_unicode_ci NOT NULL, `stilling` text COLLATE utf8_unicode_ci NOT NULL, `beskrivelse` text COLLATE utf8_unicode_ci, `WWW` text COLLATE utf8_unicode_ci, `Kategori` tinyint(1) NOT NULL, `Bruk` int(1) DEFAULT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=63 ; Tabellstrukturen min er tenkt slik: Tabell 1: Yrker, utdanninger, verv og kurs Tabell 2: IT-Kompetanse, Språk-kompetanse og sertifikater Id, hva? kompetansegrad, type kompetanse Tabell 3: Referanse Id, Fornavn, etternavn, Bedrift, Stilling, Telefon, Epost Tabell 4: Attest: ID-Tabell1, tittel, PDF-fil Tabell 5: Jobref: Id, jobid, refid Tabell 6: jobatt: id, jobid, attestid Lenke til kommentar
quantum Skrevet 3. mars 2012 Del Skrevet 3. mars 2012 (endret) i Jobref-tabellen bør du ha en unik nøkkel på job_id og ref_id, og du kan da også bruke denne som pk. dessuten bør du legge på fremmednøkler, som nevnt. Ps, generelt er det også en fordel med innoDB istedenfor myIsam, ihvertfall hvis du ønsker at mysql skal oppføre seg sånn nogenlunde som en rdbms. Bedre ytelse får du også. Endret 3. mars 2012 av quantum Lenke til kommentar
iChristian Skrevet 17. mars 2012 Forfatter Del Skrevet 17. mars 2012 Så, hvordan gjør jeg dette? Du har én tabell _kun_ med jobber og én tabell _kun_ med referanser. Så lager du en "join tabell" mellom de to som for hver rad kun inneholder ID-en til én jobb og én referanse. Lag de tabellene og lim inn "show create table" her, så kan jeg svare. Her er de tre relevante tabellene mine: CREATE TABLE IF NOT EXISTS `Jobref` ( `id` int(3) NOT NULL AUTO_INCREMENT, `job_id` int(3) NOT NULL, `ref_id` int(3) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `Referanser` ( `id` int(11) NOT NULL AUTO_INCREMENT, `Fornavn` varchar(26) COLLATE utf8_unicode_ci NOT NULL, `Etternavn` varchar(25) COLLATE utf8_unicode_ci NOT NULL, `Bedrift` varchar(60) COLLATE utf8_unicode_ci NOT NULL, `Stilling` varchar(40) COLLATE utf8_unicode_ci NOT NULL, `Telefon` mediumint(20) NOT NULL, `E-post` text COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `Yrker` ( `id` mediumint(4) NOT NULL AUTO_INCREMENT, `mndstart` tinyint(2) NOT NULL, `yearstart` year(4) NOT NULL, `mndslutt` tinyint(2) DEFAULT NULL, `yearslutt` year(4) DEFAULT NULL, `arbeidsplass` text COLLATE utf8_unicode_ci NOT NULL, `stilling` text COLLATE utf8_unicode_ci NOT NULL, `beskrivelse` text COLLATE utf8_unicode_ci, `WWW` text COLLATE utf8_unicode_ci, `Kategori` tinyint(1) NOT NULL, `Bruk` int(1) DEFAULT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=63 ; Tabellstrukturen min er tenkt slik: Tabell 1: Yrker, utdanninger, verv og kurs Tabell 2: IT-Kompetanse, Språk-kompetanse og sertifikater Id, hva? kompetansegrad, type kompetanse Tabell 3: Referanse Id, Fornavn, etternavn, Bedrift, Stilling, Telefon, Epost Tabell 4: Attest: ID-Tabell1, tittel, PDF-fil Tabell 5: Jobref: Id, jobid, refid Tabell 6: jobatt: id, jobid, attestid Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå