Gå til innhold

[Løst] Linke innhold til annet innhold i MySQL


Anbefalte innlegg

Hei.

 

Dersom jeg for eksempel vil lage en oversikt over hvilke farger som passer sammen, hvordan kan jeg linke dette til hverandre i en database?

 

Hvis jeg for eksempel har lagt inn alle fargene i en tabell, så vil jeg f. eks. oppgi at gul passer bra sammen med rød og grønn (rød og grønn er en egen linje i tabellen)

 

Går dette an? Bruker PHP og phpMyAdmin

 

Håper noen skjønte hva jeg mente

Lenke til kommentar
Videoannonse
Annonse

Du kan lage en tabell med farger, og en annen for koblinger. Koblinger har to foreign keys som peker til IDer i farge-tabellen, og kanskje et ekstra felt for typen kobling ("Komplementær" eller hva du nå har basert det på).

 

Mao:

Farger har ID og navn : [1:"Rød" , 2:"Grønn", 3:"Blå", 4:"Rosa" ]

Koblinger har fargeID1, fargeID2 og type : [ 1:2:"Komplementær", 1:4:"Fargetone"]

Lenke til kommentar
  • 2 måneder senere...

Si at jeg har en tabell med to rader; ID og farge

 

1 | Rød

2 | Grønn

3 | Gul

4 | Blå

 

Så vil jeg (på en nettside) kunne velge en av fargene, og så få opp alle fargene som passer med denne fargen. Som jeg selv har forhåndsdefinert. Spørsmålet er hvordan jeg får definert dette, og hvordan jeg henter det frem hvis noen velger f. eks. rød på nettsiden? Da må det jo være en spørring som spør etter alle fargene som jeg har koblet til rød.

 

Si at f. eks. gul og grønn skal kobles til fargen rød.

 

Har ikke laget noe som helst enda, ellers hadde jeg posta HTML- og PHP-koden.

Endret av TMB
Lenke til kommentar

Det med komplementærfarger har med fargelære å gjøre, sier noe om forholdet mellom to farger. Komplementærfarger. Rød - Grønn, Gul - blå er komplementærfarger. Bruk google hvis du har behov for å vite.

 

Fremmednøkler er felt i en tabell som refererer til en primærnøkkel i en annen tabell. Dette har du behov for å vite, så det må du google.

 

I forhold til det du skriver over så mangler du altså en tabell hvor du sier hvilke farger som passer sammen, akkurat sånn som Djn forklarte.

 

Si at fargetabellen din heter farge og koblingstabellen heter kobling, fargenavn-feltet heter fargenavn, farge-id-feltet heter id, og feltene i koblingstabellen heter id1 og id2.

 

select distinct f2.fargenavn from farge f inner join kobling k where k.id1 = f.id inner join farge f2 on f2.id = k.id2 where f.fargenavn = 'Grønn'

 

Dette bør gi deg navnet på de fargene som passer sammen med grønn. I teorien ihvertfall, ikke testet :o)

 

CREATE TABLE Farge (
		    id INTEGER NOT NULL,
		    farge VARCHAR NOT NULL,
		    CONSTRAINT Farge_pk PRIMARY KEY (id)
);

CREATE TABLE Fargekombinasjon (
		    fargeid1 INTEGER NOT NULL,
		    fargeid2 INTEGER NOT NULL,
		    CONSTRAINT Fargekombinasjon_pk PRIMARY KEY (fargeid1, fargeid2)
);

ALTER TABLE Fargekombinasjon ADD CONSTRAINT Farge_Fargekombinasjon_fk
FOREIGN KEY (fargeid1)
REFERENCES Farge (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
ALTER TABLE Fargekombinasjon ADD CONSTRAINT Farge_Fargekombinasjon_fk1
FOREIGN KEY (fargeid2)
REFERENCES Farge (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

Endret av quantum
Lenke til kommentar
  • 3 uker senere...

-snip-

Kan vi ta det steg for steg med de navnene jeg har satt på ting? Så jeg ikke blir enda mer forvirret her. Jeg prøvde å kjøre koden din men fikk error på linje 3, så jeg starta fra scratch og har nå laget følgende:

 

En tabell med navn farger

En tabell med navn kobling

 

Farger har følgende to kolonner:

 

id

farge

 

id har jeg satt til Primary og Auto Increment.

 

Kobling har følgende to kolonner:

 

fargeid1

fargeid2

 

Jeg har lagt til fire farger:

 

1 - blå

2 - rød

3 - grønn

4 - gul

 

Og det er det jeg har gjort så langt. Hva blir neste? Inbiller meg at jeg må ha en tredje kolonne i tabellen kobling, som skal peke til den fargen (ID-en) som fargeid1 og fargeid2 passer sammen med. Korrekt?

 

Og jeg bryr meg ikke om fargenyanser i denne omgang, det eneste jeg vil er å fastslå selv er:

  • Gul passer med grønn
  • Grønn passer med gul og rød
  • Rød passer med blå og rød
  • Blå passer med grønn og rød

Lenke til kommentar

Og det er det jeg har gjort så langt. Hva blir neste? Inbiller meg at jeg må ha en tredje kolonne i tabellen kobling, som skal peke til den fargen (ID-en) som fargeid1 og fargeid2 passer sammen med. Korrekt?

 

 

Jeg skjønner ikke helt nøyaktig hva du vil, og tja, du skal muligens bare ha to kolonner i koblingstabellen, slik som du har gjort. Det kommer an på.

 

Eksempelet ditt sier at Blå passer med Grønn, men Grønn passer ikke med Blå? Og passer Blå sammen med Grønn bare hvis det er Rød også? Gult passer med Grønt alene, men passer Gult med Grønt og en annen farge også? Og vil det være behov for å ha fler enn to farger på høyresiden a'la Blå passer med Grønn, Rød, Gul, Fiolett og Brun?

 

Altså, skal du lagre informasjon om at en farge passer sammen med en kombinasjon av en eller to andre farger (eller fler), uten at en dermed kan slutte at en eller begge de andre fargene passer sammen med den første? Og - igjen - går grensen ved to på "høyresiden", eller kan det være flere?

 

Gitt de fargene/id'ene du har lagt inn i fargetabellen så blir "Blå passer med Grønn og Rød" til to rader i koblingstabellen:

 

fargeId1 | fargeId2

-----------------------

1 | 2

1 | 3

-----------------------

 

Som du sikkert skjønner kan du lese dette som to regler også

 

Blå passer med Rød

Blå passer med Grønn

 

Er det meningen?

 

Og hvis vi innfører farge nr 5 - Brun

 

fargeId1 | fargeId2

-----------------------

1 | 2

1 | 3

1 | 5

-----------------------

 

Hva skal det bety?

 

Blå passer med Rød og Grønn?

Blå passer med Brun?

Blå passer med Grønn og Brun?

Blå passer med Grønn, Rød og Brun?

 

Og igjen - Passer Brun med Blå, dersom Blå passer med Brun?

Dersom Blå passer med Rød og Grønn, betyr det også at Rød Passer med Grønn, eller med Grønn og Blå?

Endret av quantum
Lenke til kommentar

Beklager, skal selvfølgelig være slik:

 

Gul passer med grønn og rød

Grønn passer med blå, gul og rød

Rød passer med grønn, blå og gul

Blå passer med grønn og rød

 

Da blir det vel riktig :p

 

Og ja, det kan gjerne være fler enn to som passer.

Endret av TMB
Lenke til kommentar
Inbiller meg at jeg må ha en tredje kolonne i tabellen kobling, som skal peke til den fargen (ID-en) som fargeid1 og fargeid2 passer sammen med. Korrekt?

 

Og ja, det kan gjerne være fler enn to som passer.

Her har du vel egentlig besvart ditt eget spørsmål siden det er fler enn to som skal kunne passe med den ene på en gang. Generelt: Det er ikke noen god løsning å lage en koblingstabell med 1 + N kolonner hvis du vil lagre informasjon om at en farge passer sammen med opptil N andre.

 

Akkurat hvaslags tabellstruktur som passer for deg kan jeg ikke vite, kanskje den du har fått alt vil funke, kanskje ikke, det kommer an på kravene dine, som du ikke sier så mye om.

Endret av quantum
Lenke til kommentar

Fint, da er du jo i mål. Du kobler dem sammen med fremmednøkler som vist i eksempelet. Edit: "Koblingen" sikrer referanseintegritet, dvs. dersom en farge er brukt i en kobling, vil du ikke få lov til å slette den fra fargetabellen. Å hente ut "sammenkoblingene" fra tabellene gjør du med en join-spørring, som forsåvidt ikke er avhengig av fremmednøklene.

Endret av quantum
Lenke til kommentar

Litt sånn halveis off-topic: Jeg tror ikke det å sette relasjoner til hvilke farger som passer sammen er riktig å lagre i databasen, det korrekte er vel å lagre dette i applikasjonen du lager i PHP.

Lenke til kommentar

Siden det ikke er så mange krav inne i bildet er selvfølgelig det også riktig :o)

 

Hvis det er statisk informasjon, og det ikke er snakk om så mange kombinasjoner, behøves ingen database. Det kunne til og med lagres som strenger i en liste eller et array; "Rød passer sammen med Gul og Grønn" osv. Men vi er nå engang i databasegruppa ...

Endret av quantum
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...