Jag förstår inte. Du har alltså ett antal conditionnycklar utifrån vilka du vill hämta relaterade questions? För att få fkey_question(15, 5) behöver du väl bara
select fkey_question from questioncondition where fkey_condition in (0, 2)
Databaser & SQLur Databashanterare & SQL
9 svar · 658 visningar · startad av cok
Hej,
Jag har följande tabeller:
QuestionCondition:
fkey_Condition | fkey_Question | Pkey_GroupID
0 | 5 | 4
2 | 15 | 0
1 | 15 | 0
Condition:
pkey_ConditionID | ConditionName
0 | BAS
1 | BASADVANCED
2 | MOVABLE
En Question kan ha godtyckligt många conditions och dessa kopplas till en grupp. Gruppen ska användas för att få ut vilka Question som ska visas. Så om jag ställer frågan med MOVABLE och BAS, så ska jag få ut fkey_Question (15, 5).
GruppId:et är till för att man endast behöver ha en (t ex MOVABLE) per grupp.
Tankarna går ihop här och nu, hur ställer jag frågan?
r: kör mssql, vet inte om det är mssql 2005 men 2000 ivf.
Jag förstår inte. Du har alltså ett antal conditionnycklar utifrån vilka du vill hämta relaterade questions? För att få fkey_question(15, 5) behöver du väl bara
select fkey_question from questioncondition where fkey_condition in (0, 2)
select fkey_question
from questioncondition
where fkey_condition in
(select pkey_conditionID
from Condition
where conditionName in ('BAS','MOVABLE'))
select fkey_question
from questioncondition
where fkey_condition in
(select pkey_conditionID
from Condition
where conditionName in ('BAS','MOVABLE'))
Jag förstår dock inte hur grupperna kommer in i det hela.
LarsG skrev:
select fkey_question from questioncondition where fkey_condition in (select pkey_conditionID from Condition where conditionName in ('BAS','MOVABLE'))Jag förstår dock inte hur grupperna kommer in i det hela.
Jo, säg att det finns Päron, Äpple och Bilar som är av samma grupp. Det ska då räcka att jag har en av dessa tre för att QuestionID ska returneras.
Ingen som förstår vad jag menar?
Okej, vi tänker om lite...
Säg att vi har
dbQuestion
QuestionId | bla | bla
1 | bla | bla
2 | bla | bla
dbQuestionGroup
fkey_GroupId | fkey_QuestionID
100 | 1
101 | 1
101 | 2
dbGroupCondition
fkey_GroupId | fkey_ConditionId
100 | 0
101 | 2
101 | 3
dbCondition
pkey_ConditionId | ConditionName
0 | 'Bil'
1 | 'Båt'
2 | 'Bike'
3 | ' Moppe'
Redigerat:
Säg att jag har Bil och Bike, då vill jag få ut både QuestionId 1, 2. Det ska alltså räcka att jag har en Condition per grup så länge jag har MINST en i varje grupp som är knuten till en Question. Blir det något klarar nu? :stud
I alla fall jag förstår inte. På vilket sätt fungerar inte Lars förslag? Kan du ge ett exempel på när det inte fungerar?
Red./ Tajming var det...
Nja, Lars förslag tar inte hänsyn till gruppen. Om vi har en question som har tre grupper knytna till sig:
Grupp1 : innehåller Bil, båt, hus
Grupp2 : innehåller Bil, träd,
Grupp3 : innehåller båt, hus, träd
Säg att jag då har Bil, då ska jag inte få träff på denna Question då jag inte har något av objekten i grupp3. Säg att jag även har hus. Då ska jag få träff för då har jag MINST ett objekt i varje grupp.
Nu tror jag jag var lite bättre på att förklara :)
Ok, sakta men säkert...
Har följande sql som tar ut alla gruppid som jag är behörig till
select distinct Pkey_GroupId
from GroupCondition gc
join Condition con on con.pkey_ConditionID = gc.fkey_ConditionId
where fkey_ConditionId in (
select pkey_ConditionID
from Condition
where ConditionName in ('BIL', 'BÅT'))
Detta resultatet vill jag köra mot dbQuestionGroup (se ovan i tidigare inlägg). För att fkey_QuestionID ska returneras så måste frågan ha som mest exakt de gruppid som returneras från ovan select. Alltså om frågan returnerar gruppid (100 och 101) så ska både QuestionID 1 och 2 returneras.
Om ovan fråga endast returnerar 101 ska endast QuestionID 2 returneras. Hoppas någon förstår vad jag menar :)