Gå til innhold

Anbefalte innlegg

Skrevet (endret)

Har noen tabeller i en mySql database.

Eksempel: fruktkurv & epler

 

SELECT * FROM fruktkurv, epler WHERE fruktkurv.fruktkurvId = epler.fruktkurvId

 

Denne er grei, men hvordan kan jeg liste fruktkurver som ikke inneholder epler

og hvordan ville det se ut hvis hvis jeg også hadde appelsiner, bananer osv.

 

EDIT:

Fant ut av det...

 

$sql = "SELECT DISTINCT * FROM fruktkurv

WHERE NOT EXISTS (SELECT * FROM epler, appelsiner, bananer, plommer

WHERE epler.fruktkurvId = fruktkurv.fruktkurvId

OR appelsiner.fruktkurvId = fruktkurv.fruktkurvId

OR bananer.fruktkurvId = fruktkurv.fruktkurvId

OR plommer.fruktkurvId = fruktkurv.fruktkurvId

)";

Endret av Teobald
Videoannonse
Annonse
Skrevet

det så ikke akkurat ut som noen pen spørring...

 

Prøv med f.eks

 

SELECT * FROM fruktkurv

LEFT JOIN epler ON epler.fruktkurvid = fruktkurv.fruktkurvid

LEFT JOIN plommer ON pl... etc

 

Da vil du hente fram alle fruktkurvene samme hva de inneholder

Skrevet

Jeg synes det er veldig dårlig design å splitte opp frukttyper i forskjellige tabeller. Tenk på alle spørringer som må skrives om når du introduserer en ny frukttype.

 

Lage heller tre tabeller:

 

FruktTyper(FruktTypeId int primary key, FruktType varchar(50))

Frukter(FruktId int primary key, FruktTypeId int, FruktNavn varchar(50))

FruktkurvFrukter(FruktkurvId int, FruktId int, Antall tinyint) PK er FruktkurvId+FruktId

 

I FruktTyper har du verdier som 1,'Eple' ; 2,'Appelsin' ; 3,'Plomme' ; 4,'Drue' osv

I Frukter har du verdier som 1,1,'Gravenstein' ; 2,1,'Aroma' ; 3,2,'Moro' ; 4,2,'Tarocco' ; 5,3,'Opal' osv

I FruktkurvFrukter har du verdier som 1,1,2 ; 1,2,1 ; 1,3,3 som sier at du i fruktkurv 1 har 2 Gravenstein epler, 1 Armoa eple og 3 Moro applesiner.

Skrevet
det så ikke akkurat ut som noen pen spørring...

 

Prøv med f.eks

 

SELECT * FROM fruktkurv

LEFT JOIN epler ON epler.fruktkurvid = fruktkurv.fruktkurvid

LEFT JOIN plommer ON pl... etc

 

Da vil du hente fram alle fruktkurvene samme hva de inneholder

 

Jeg ville gjerne hente ut alle registrerte fruktkurver hvor det ikke var samsvar mellom

flere frukttyper og fruktkurven (tomme fruktkurver).

Skrevet

For å hente ut fruktkurver som ikke har 'Eple'. Har ikke testet spørringen, men mener den skal virke.

 

select fk.* from Fruktkurver fk
left join FruktkurvFrukter fkf on fkf.FruktkurvId=fk.FruktkurvId
left join Frukter f on f.FruktId=fkf.FruktId
left join FruktTyper ft on ft.FruktTypeId=f.FruktTypeId and ft.FruktType='Eple'
where ft.FruktTypeId is null

Skrevet
Men uansett: En tabell pr frukttype? Snakk om ELENDIG databasedesign!

 

Det er jo her selvfølgelig ikke frukt det handler om (dette er kun brukt som eksempel),

men produkter i flere klasser hvor de forskjellige klassene kan ha fra 5-6 til 30-40 forskjellige

"properties" (rader) som skal registreres i fruktkurven (som jo da ikke er en fruktkurv i det hele tatt) ...

Skrevet
Det er jo her selvfølgelig ikke frukt det handler om (dette er kun brukt som eksempel),

men produkter i flere klasser hvor de forskjellige klassene kan ha fra 5-6 til 30-40 forskjellige

"properties" (rader) som skal registreres i fruktkurven (som jo da ikke er en fruktkurv i det hele tatt) ...

 

Du må allikevel ha en "master"-produkttabell som minimum inneholder produktid og produkttype. Så kan du opprette egne tabeller for å lagre produktegenskaper hvis du vil.

Skrevet
Det er jo her selvfølgelig ikke frukt det handler om (dette er kun brukt som eksempel),

men produkter i flere klasser hvor de forskjellige klassene kan ha fra 5-6 til 30-40 forskjellige

"properties" (rader) som skal registreres i fruktkurven (som jo da ikke er en fruktkurv i det hele tatt) ...

 

Du må allikevel ha en "master"-produkttabell som minimum inneholder produktid og produkttype. Så kan du opprette egne tabeller for å lagre produktegenskaper hvis du vil.

 

Skulle til å si det samme selv. Produktnr/navn og pris(er) burde også kunne legges i den master-produkttabellen.

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...