webForumDet fria alternativet

resultat beroende på gruppering

Databaser & SQLur Databashanterare & SQL

9 svar · 658 visningar · startad av cok

Medlem sedan dec. 2005664 inlägg
Frågan#1

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.

Medlem sedan dec. 20025 483 inlägg
#2

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)
Medlem sedan dec. 200012 464 inlägg
#3
select fkey_question 
  from questioncondition 
where fkey_condition in 
  (select pkey_conditionID
     from Condition
    where conditionName in ('BAS','MOVABLE'))
Medlem sedan dec. 200012 464 inlägg
#4
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.

Medlem sedan dec. 2005664 inlägg
#5

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.

Medlem sedan dec. 2005664 inlägg
#6

Ingen som förstår vad jag menar?

Medlem sedan dec. 2005664 inlägg
#7

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

Medlem sedan dec. 20025 483 inlägg
#8

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

Medlem sedan dec. 2005664 inlägg
#9

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 :)

Medlem sedan dec. 2005664 inlägg
#10

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 :)

130 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)