Avatar billede Slettet bruger
15. december 2011 - 05:11 Der er 17 kommentarer og
1 løsning

SQL Produkter med subprodukter

Hej jeg sider og prøver at lave et sql string der skal kun søge i produkter og hvis der er en tillægs produkt på dette skal den også smide den ud til mig

>Produkter<
ProdukterID
ProdukterNr
ProdukterTitle

Data
1,1000,Computer
2,1001,CPU
3,1002,RAM
4,1003,DISK


>ProdukterSub<
ProdukterSubID
ProdukterID
ProdukterNr

Data
1,1,1001
2,1,1002
3,1,1003

Når jeg så søger på 1000 få skal jeg så have denne data

1,1000,Computer
2,1001,CPU
3,1002,RAM
4,1003,DISK

Men søger jeg så på 1001 får jeg kun 2,1001,CPU
Desværre har jeg ikke kun finde en løsning der har virker

Håber der en en venlig person der kan hjælp mig..
15. december 2011 - 07:09 #1
Er det en trykfejl, når du siger, at søger du på 1001 får du kun 2, 1001, CPU? Sådan som jeg forstår tabellerne har 1000 de tre subprodukter 1001, 1002, 1003, men 1001 har ingen subrodukter, så ved søgning på 1001 er det korrekt kun at få CPUen.

Men tillad mig at foreslå at bruge en enkelt tabel hvor du har en ekstra kolonne parent.  Jeg lavede denne testtabel:

CREATE TABLE weblis(id INT, nr INT, parent INT, title VARCHAR(10));
INSERT INTO weblis VALUES(1, 1000, 0, 'Computer');
INSERT INTO weblis VALUES(2, 1001, 1, 'CPU');
INSERT INTO weblis VALUES(3, 1002, 1, 'RAM');
INSERT INTO weblis VALUES(4, 1003, 1, 'DISK');

Og med denne query:

SELECT id, nr, title FROM weblis WHERE nr = 1000
UNION
SELECT w2.id, w2.nr, w2.title FROM weblis w1
LEFT JOIN weblis w2 ON w1.id = w2.parent
WHERE w1.nr = 1000;

fik jeg dette resultat:

id nr title
1  1000  computer
2  1001  CPU
3  1002  RAM
4  1003  DISK
Avatar billede Slettet bruger
15. december 2011 - 07:15 #2
Grunde til jeg lave det i to table er at jeg skal bruge ting flere gang i et par af ting sådan at jeg kan kalde 1001 ud som så måske har et tillæg produkt mere.. men ikke bliver kaldt i 1000..
Avatar billede Slettet bruger
15. december 2011 - 07:18 #3
Den virker ikke til dette her. desværre..
15. december 2011 - 08:34 #4
Jamen det er nok mig der ikke har forstået problemstillingen.  Det må vi så håbe, at der er andre, der gør.
21. december 2011 - 11:49 #5
weblis, hvad er nu din videre hensigt med dette spørgsmål?  I dit spørgsmål viser du hvad du får når du søger på 1001, men du forklarer ikke, hvad du forventede at se.  Sådan som jeg læser det får du det korrekte resultat ved søgning på 1001.  Det forklarede jeg, og for at kunne hjælpe bad jeg om yderligere oplysninger.  (Samtidig foreslog jeg, at du forenklede din database struktur, men det var for dig ikke relevant.)  Du kom ikke tilbage med yderligere oplysninger (du sagde, at 'den virker ikke..' men det blev jeg ikke klogere af), og du fik ikke indlæg fra anden side.

Hvad er nu din videre hensigt med spørgsmålet?  Hvis du stadig er interesseret i løsningsforslag fra min side, så giv lidt mere forklaring, såsom at vise hvilke data du forventede ved søgning på 1001 og hvordan dette forventede resultat kan udledes fra de data du viser.  Hvis spørgsmålet ikke længere er aktuelt, så luk det venligtst igen (ved selv at oprette et svar.)
Avatar billede Slettet bruger
21. december 2011 - 12:18 #6
Undskyld jeg forstod på dig du gav op. men jeg prøver da geren fordi jeg gerne vil have løst denne opgave da..

Ide er at jeg skal kun se om der er gebyr på en pågælden vare eller ander udgifter..

eks jeg skal vi mit shop system kun bestille et dotcom domain
og da det er en bestilling via nr 1001 så får jeg
1001 Oprettels af .com
1301 årsgebyr på .com

fra min database

men søger jeg på 1301 i min database får jeg kun
1301 årsgebyr på .com
21. december 2011 - 13:45 #7
Det er nok mig der er tumpet.  Jeg forstår som sagt ikke dit oprindelige spørgsmål, og jeg forstår heller ikke sammenhængen mellem dit oprindelige spørgsmål og dit sidste indlæg. 

I dit oprindelige spørgsmål viser du to tabeller med data.  I Produkter har du fire linier med produktnumrene 1000, 1001, 1002, og 1003.  I ProdukterSub har du tre linier, ProduktNr 1001, 1002, og 1003.  Alle tre har ProdukterID = 1.  De hører derfor til det produkt der i tabellen Produkter har ProduktID = 1, nemlig produkt 1000.  Produkterne 1001, 1002, og 1003 er subprodukter af produkt 1000.

Du sagde, at du vil søge efter produkter med tillægsprodukter.  Hvis et tillægsprodukt er det samme som et subprodukt, så er det logisk, at når du søger efter produkt 1000, så skal du få dette:

1,1000,Computer
2,1001,CPU
3,1002,RAM
4,1003,DISK

Men for produkt 1001, med ProduktID = 2, viser du ikke nogen subprodukter.  Der er ingen rækker i tabellen ProdukterSub med ProduktID = 2.  Når du søger på 1001, så får du 2, 1001, CPU.  Det er præcist hvad du ifølge min logik skulle få med de tabeller du viser og de data du viser i tabellerne.

Du forventer åbenbart at få noget mere når du søger på 1001.  Kan jeg få dig til at skrive ud hvad du forventer, på samme måde som du skrev ud hvad du får når du søger på 1000?  For ellers kan jeg ikke forstå problemet og kan derfor ikke medvirke til at løse det.
Avatar billede Slettet bruger
21. december 2011 - 14:05 #8
problemmer med din opsætning er at der ikke kan være flere der bruger sammen sub produkt.. ellers kun jeg godt bruge den
21. december 2011 - 15:07 #9
Vil du ikke svare på det spørgsmål jeg stillede?
Avatar billede Slettet bruger
21. december 2011 - 15:18 #10
jo da jeg ved bare ikke hvad jeg skal svar på det..
21. december 2011 - 15:37 #11
Du skriver i det oprindelige spørgsmål:

Men søger jeg så på 1001 får jeg kun 2,1001,CPU

Jeg spørger hvad du ville have haft i stedet.  Ved du ikke hvad du skal svare på det?
Avatar billede Slettet bruger
21. december 2011 - 15:45 #12
Ja jeg vil have sådan at når jeg søger på vare med ProdukterNr
1001 at den så gå i Produkter og henter vare
når den så har hente den skal de se i ProdukterSub om der er en vare der har sammen ID og hvis der er skal den hente dem der kommer i Produkter
21. december 2011 - 16:03 #13
Det var det jeg troede.  Men du giver disse tabeller:

Produkter
1,1000,Computer
2,1001,CPU
3,1002,RAM
4,1003,DISK

ProdukterSub
1,1,1001
2,1,1002
3,1,1003

Når du i Produkter søger på 1000, så får du ProdukterID = 1, og i ProdukterSub er der tre linier med ProduktID = 1.  Derfor får du, som du siger, dette:

1,1000,Computer
2,1001,CPU
3,1002,RAM
4,1003,DISK

Når du i stedet søger på 1001, så får du ProdukterID = 2, og fordi der ikke er noget i ProdukterSub med ProdukterID = 2, så får du, som du siger, dette:

2,1001,CPU

Og det er da, ud fra de oplysninger du giver, et korrekt resultat, ikke sandt?  Hvis jeg har forstået det forkert, så prøv at skriv ud det resultat der er korrekt når du søger på 1001.
Avatar billede Slettet bruger
21. december 2011 - 16:09 #14
Problemmer er bare jeg kan ikke få ram til at tage anden med hvis jeg kun kalder den via 1002 eller nåd i den sti.. ellers var din ide god nok
Avatar billede Slettet bruger
21. december 2011 - 16:10 #15
jeg kom til at skrive 1000 et sted hvor jeg mente 1001
21. december 2011 - 16:43 #16
Du svarer ikke på det spørgsmål jeg stiller.  Hvordan kan det være?
22. december 2011 - 06:31 #17
Ved du hvad, jeg tror du har fået formuleret spørgsmålet uheldigt.  Du siger, i realiteten, at når du søger på et produkt skal du have dette produkt plus subprodukter hvis der er nogen.  Så viser du to tabeller hvor produkt 1000 har tre subprodukter og produkt 1001 ikke har nogen subprodukter.  Derfor skal søgning på 1000, som du siger, give dette resultat:

1,1000,Computer
2,1001,CPU
3,1002,RAM
4,1003,DISK

Søgning på 1001 skal, ifølge tabellerne, give dette resultlat:

2,1001,CPU

men det resultat er du utilfreds med.  Du siger, at du KUN får 2,1001,CPU.  Det forvirrer mig, og tilsyneladende forvirrer det også alle andre, for du har ikke fået indlæg fra andre.  Og jeg tror det også forvirrer dig selv, for du har ikke været i stand til at vise, hvad du ville have haft i stedet for.

Jeg foreslår, at du lukker dette spørgsmål og starter forfra på et nyt og bedre formuleret spørgsmål.  Du kan bestemme, om du vil acceptere mit svar som hjælp til bedre at formulere problemet eller om du selv vil oprette et svar og acceptere det.

I dit nye spørgsmål vil jeg foreslå, at du viser de to tabeller med data og forklarer, at du ved søgning på et produkt også vil have produktets subprodukter hvis der er nogen.
Avatar billede Slettet bruger
05. januar 2012 - 18:08 #18
Lukket..
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