Avatar billede grind Nybegynder
25. februar 2007 - 08:50 Der er 9 kommentarer

Udelukke en mængde når en del af mængden mangler

Jeg har en side, hvor jeg præsenterer en sammensat vare, der består af nogle produkter - et sampak.
Mit problem er hvordan jeg undgår at varen bliver vist på hjemmesiden, hvis blot én af de produkter, der indgår i varen er udsolgt.
Jeg har følgende tabeller, hvor data kommer fra:
SAMMENSATVARE(felter: NAVN og BESKRIVELSE af "pakken")
SAMMENSATVARELINIE (felter:VARE_ID,ANTAL)
VARELAGER:(hvor feltet DISPONIBELT hentes)
Jeg vil gerne have lavet det sådan at hvis (SAMMENSATVARELINIE.ANTAL + 5 stk) < VARELAGER.DISPONIBELT skal hele varen fjernes fra siden. Er der nogen, der kan give et hint om hvordan forespørgslen skal se ud? (siden er lavet i Dreamweaver ASP "JAVASCRIPT")
Avatar billede grind Nybegynder
25. februar 2007 - 08:53 #1
Det skal måske lige tilføjes at de sammensatte varer vises i et repeat region, hvor kun SAMMENSATVARE.NAVN og SAMMENSATVARE.BESKRIVELSE vises med link til det detaljerede indhold via VARE_ID
Avatar billede kalp Novice
25. februar 2007 - 09:04 #2
SELECT SAMMENSATVARE.NAVN, SAMMENSATVARELINIE.ANTAL, VARELAGER.DISPONIBELT FROM SAMMENSATVARE,SAMMENSATVARELINIE,VARELAGER WHERE -> Her joiner du dine tabeller <-  AND SAMMENSATVARELINIE.ANTAL + 5 < VARELAGER.DISPONIBELT;

sådan der vil jeg mene.. men du skal lige smide join delen på. Der mangler lidt info om hvad primary key og foreign key er i de forskellige så du joiner dem selv.
Avatar billede grind Nybegynder
25. februar 2007 - 10:09 #3
Som denne?:

SELECT Varelager.disponibelt, Sammensatvare.navn, Sammensatvare.beskrivelse, Sammensatvarelinie.antal
FROM Sammensatvare INNER JOIN (Varelager INNER JOIN Sammensatvarelinie ON Varelager.vareid = Sammensatvarelinie.vare_id) ON Sammensatvare.id = Sammensatvarelinie.sammensat_vare_id
WHERE Sammensatvarelinie.antal +5 < Varelager.disponibelt;

Det er den samme som jeg selv har prøvet. Her fjernes kun de varer der ikke opfylder betingelsen, men PAKKENS øvrige varer vises stadig, hvorfor pakken stadig vil blive vist på siden....
Avatar billede kalp Novice
25. februar 2007 - 10:25 #4
ved ikke om man må det i SQL på dette punkt men mit bud ville være.

Sammensatvarelinie.sammensat_vare_id NOT IN ();


SELECT Varelager.disponibelt, Varelager.vareId as vareId, Sammensatvare.navn, Sammensatvare.beskrivelse, Sammensatvarelinie.antal
FROM Sammensatvare INNER JOIN (Varelager INNER JOIN Sammensatvarelinie ON Varelager.vareid = Sammensatvarelinie.vare_id) ON Sammensatvare.id = Sammensatvarelinie.sammensat_vare_id
WHERE Sammensatvarelinie.antal +5 < Varelager.disponibelt AND Sammensatvarelinie.sammensat_vare_id NOT IN (vareId) AND Sammensatvare.id NOT IN (vareId);

men ved som sagt ikke om det godtages.
Avatar billede kalp Novice
25. februar 2007 - 10:26 #5
"Sammensatvarelinie.sammensat_vare_id NOT IN ();"

som står alene før skal du bare ignorere:)
Avatar billede grind Nybegynder
25. februar 2007 - 11:03 #6
som dette ?:
WHERE ((Sammensatvarelinie.antal+5) < varelager.disponibelt) AND Sammensatvarelinie.sammensat_vare_id NOT IN ();

melder fejl: syntaksfejl fordi der mangler en operator i forespørgselsudtrykket.
Avatar billede kalp Novice
25. februar 2007 - 11:16 #7
ja hvis det ikke virker så kan man vel ikke sætte det op sådan.. det var blot det bud jeg havde:)

men det skal lige siges at den linje du viser mig ikke stemmer i overens med det jeg skrev før...

som sagt skal du ignorere
Sammensatvarelinie.sammensat_vare_id NOT IN ();"

og kigge på den lange select i mit indlæg

Kommentar: qawi
25/02-2007 10:25:41
Avatar billede grind Nybegynder
25. februar 2007 - 11:36 #8
Strengen accepteres men stadig er det kun de linier der ikke opfylder kravet til antal+5<disponibelt, der bortfalder. Resten af varerne vises stadig - og dermed pakkerne.
Kunne man tænke sig at man kunne sammenligne antallet af varelinier der er i pakkerne med det antal der opfylder minimumskravet - og hvis ikke disse er ens bortfalder pakken....
Avatar billede kalp Novice
25. februar 2007 - 11:44 #9
tror det er bedst en SQL ekspert udarbejder sql'en:)

og ellers kan du gøre det programmelt... dvs. før du udskriver på din ASP side tjekke om det der er ved at blive udskrevet ligger i en liste af id'er som gerne må udskrives.
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
Kurser inden for grundlæggende programmering

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