Avatar billede snappi-v Nybegynder
10. oktober 2007 - 15:48 Der er 14 kommentarer

Flere udtræk fra forskellige tabeller

Hej Eksperter,

Hvordan vil i knække denne her

Jeg har en vare_tabel som har hare et hovedkategori_id.

Jeg har også en vare_kategori_tabel med et kategori_id og vare_id. (disse kategorier er varen også tilføjet i)

Jeg skal have lavet et SQL udtræk, som henter alle vare ud fra kategori_id.  Gir det mening?

Dvs den skal
- finde alle vare med hovedkategori_id der passer, fra vare_tabel
- finde alle vare_id, hvor kategori_id der passer, vare_kategori_tabel, og så ud fra de fundne vare_id, hente vare oplysninger.

Jeg er helt på bar bund.
Avatar billede fennec Nybegynder
10. oktober 2007 - 15:53 #1
select v.* from vare_tabel v inner join vare_kategori_tabel vk where vk.kategori_id=123
Avatar billede ffsoft Praktikant
10. oktober 2007 - 16:07 #2
Nej det giver ikke mening

Du har en tabel med varekategorier

tblKategori
  KategoriID (PK)
  KategoriNavn

og en tabel med varer

tblVare
  VareID (PK)
  VareNavn
  ...
  KategoriID (FK)

Fordi en vare tilhører en og kun en kategori
og en kategori kan indeholde nul,en eller flere varer.

Der er altså en 1-til-mange relation imellem varekategori
og vare, med varekategori på 1 siden.

Sådan som du har lavet det, er det omvendt.
Avatar billede ffsoft Praktikant
10. oktober 2007 - 16:09 #3
Select * From tblVare Where tblVare.KategoriID = 123
Avatar billede snappi-v Nybegynder
10. oktober 2007 - 16:45 #4
Okay,

Jeg har en vare tabel (cas_eshop_vare), hvor der er et kategori_id felt.

Jeg har en vare_kategori tabel (cas_eshop_vare_kategori), hvor der er kategori_id og vare_id felt.

Når jeg skal lave mit udtræk så har jeg en 'kategori_id' til rådighed.

Jeg skal så have alle vare fra cas_eshop_vare hvor kategori_id passer, desuden skal jeg have de vare (igen fra cas_eshop_vare), fra
vare_kategori (der kan du jo kun hive vare id ud, så skal igen ind og finde vare data i cas_eshop_vare).

Forståelsen.

Se det som at en udvidelse hvor en vare i første omgang kun kunne vre i en kategori, men hvor der så nu skal være mulighed for at en vare kan ligge i flere kategorier
Avatar billede snappi-v Nybegynder
10. oktober 2007 - 16:46 #5
ffsoft nej slet ikke, det er fordi at en vare nu skal kunn e høre til flere forskellige kategorier.
Avatar billede ffsoft Praktikant
10. oktober 2007 - 18:43 #6
Hvis en vare kan høre til forskellige kategorier og en kategori skal kunne indeholde forskellige varer er der et mange-til-mange forhold
i mellem dem. Det klares ved at oprette en ekstra tabel.

tblKategori
  KategoriID (PK)
  KategoriNavn
....

tblVare
  VareID (PK)
  VareNavn
....

tblVare_Kategori
  KategoriID (FK)
  VareID (FK)
....
Avatar billede ffsoft Praktikant
10. oktober 2007 - 18:46 #7
Select Varenavn From tblVare, tblVare_Kategori Where tblKategori.KategoriID = 123

Dette vil give navnet på alle varer i den kategori der har 123 som nøgle.
Avatar billede snappi-v Nybegynder
10. oktober 2007 - 22:20 #8
Jeg tror ikke jeg har udtrykt mig klar nok, en vare tilhørs forhold (kategori) står 2 steder.

Både en tabellen
cas_eshop_vare
og tabllen
cas_eshop_vare_kategori

f.eks
cas_eshop_vare
vare_id=2,titel=bla,pris=90,kategori_id=9

cas_eshop_vare_kategori
id=3,vare_id=2,kategori_id=4
id=4,vare_id=2,kategori_id=10

Så høre skal varen her altså komme frem når man ser kategori 4,9, og 10
Avatar billede ffsoft Praktikant
10. oktober 2007 - 22:49 #9
Prøv dette:

Select cas_eshop_vare.vare_id, cas_eshop_vare_kategori.vare_id
From cas_eshop_vare, cas_eshop_vare_kategori
Where cas_eshop_vare.kategori_id in (4,9,10)
Or cas_eshop_vare_kategori.kategori_id in (4,9,10)

Jeg har ikke testet det.
Jeg vil stadig hævde at din datamodel er forkert.
Avatar billede ffsoft Praktikant
10. oktober 2007 - 22:52 #10
Hmmmmm Where delen skal nok se sådan ud:

Where eshop_vare.vare_id = eshop_vare_kategori.vare_id 
And (cas_eshop_vare.kategori_id in (4,9,10)
Or cas_eshop_vare_kategori.kategori_id in (4,9,10))
Avatar billede snappi-v Nybegynder
11. oktober 2007 - 00:08 #11
ffsoft, ja, men den kan jeg desværre ikke ændre ved.

Jeg har heller ikke selv testet det, men du angiver 3 kategori id
4,9,10

jeg har jo kun et kategori_id f.eks 10 og så skal varen komme frem, varen skal også komme frem ved 9.

Eller vil du have mig til først at hive alle kategori_id fra (cas_eshop_vare_kategori) ud og genere (4,9,10) dynamisk?
Avatar billede fennec Nybegynder
11. oktober 2007 - 07:39 #12
Det ville jeg klare med en union:
select v.* from cas_eshop_vare v where kategori_id=123
union
select v.* from cas_eshop_vare v inner join cas_eshop_vare_kategori vk where kategori_id=123
Avatar billede ffsoft Praktikant
11. oktober 2007 - 14:40 #13
Du vil lede efter en vare der har kategori 10 og det har vare 2 f.eks.
så vil du vide hvilke kategorier denne vare osse findes i ??

Altså 4 og 9.

Er det problemstillingen??
Avatar billede snappi-v Nybegynder
10. januar 2008 - 23:44 #14
ffsoft, ked af jeg ikke har svaret før nu, det er løst på en anden måde. Tak for hjælpen.
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
Computerworld tilbyder specialiserede kurser i database-management

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