webForumDet fria alternativet

Får ut dubbla poster

8 svar · 704 visningar · startad av jimpa

jimpaMedlem sedan jan. 2001361 inlägg
#1

Hej

Jag har en tabell som heter permisson. I den tabellen sparas GroupID den posten finns alltid. Ibland sparas även en ny post med ett MedlemsID

Problemet är att finns det en post med MedlemsID så får jag ju ut dubbla poster

Själva where satsen i sql frågan ser ut ungefär så här

WHERE MemberID = " & intLoggedInMemberID & " OR "GroupID = " & intLoggedInGroupID & " "

Går det att direkt i where satsen bara hämta posten med MemberID om den finns och hämta posten med GroupID i andra hand?

MVH Jimpa

jimpaMedlem sedan jan. 2001361 inlägg
#2

Jag förtydligar mig lite :)

Hela SQL frågan kan se ut så här:

 
 	strSQL = "SELECT Forums.fName, Forums.fPassword, Forums.fLocked, "
 	strSQL = strSQL & "Permissions.* "
 	strSQL = strSQL & "FROM (Forums "
 	strSQL = strSQL & "INNER JOIN Permissions ON Forums.ForumID = Permissions.pForumID) " 
	strSQL = strSQL & "WHERE Forums.ForumID = " & intForumID & " "
	strSQL = strSQL & "AND (Permissions.pMemberID = " & intLoggedInMemberID & " OR Permissions.pGroupID = " & intLoggedInMemberGroupID & ") "

Problemet är nu:
Om detta uppfylls: Permissions.pMemberID = " & intLoggedInMemberID
Så ska inte denna posten hämtas: Permissions.pGroupID = " & intLoggedInMemberGroupID

Går detta att göra direkt i SQL satsen? Eller måste jag först kolla om den posten existerar med en annan SQL sats?

Skriva SELECT TOP 1.... skulle nog funka just i detta fall men jag har en massa andra sql frågor där fler poster ska hämtas, så det skulle inte bli en bra lösning dock!

aasahMedlem sedan mars 20034 471 inlägg
#3

Den fråga jag ställer mig är vad intLoggedInMemberID har för värde när detta inte stämmer? Dvs rent värdemässigt, när behöver du plocka det från gruppid:t? Om det finns något bra svar på den frågan kan antagligen IFF eller CASE hjälpa upp saken.

jimpaMedlem sedan jan. 2001361 inlägg
#4

Nja intLoggedInMemberID kan ju ha vilket ID nummer som helst förutom 0 (noll)

Den här raden talar väl för när jag behöver plocka det från gruppid?

strSQL = strSQL & "AND (Permissions.pMemberID = " & intLoggedInMemberID & " OR Permissions.pGroupID = " & intLoggedInMemberGroupID & ") "

Lås säga att en medlem gruppid 1 och medlems id 1
i tabellen Permission kan det se ut så här:

pForumID : pGroupID : pMemberID

1              1               0    \<---   Den här posten är default o finns för alla medlemmar  
1              1               1    \<---  Finns den här gäller inte den ovanstående posten för den här medlemmen
1              1               2
1               1              3

Om medlemmen istället har id't 4 Då ska den defaulta posten gälla, alltså den med member id 0

LarsGMedlem sedan dec. 200012 464 inlägg
#5
strSQL = _
 "SELECT Forums.fName, Forums.fPassword, Forums.fLocked, " & _
 "Permissions.* " & _
 "FROM Forums " & _
 "INNER JOIN Permissions ON Forums.ForumID = Permissions.pForumID " & _
 "WHERE Forums.ForumID = " & intForumID & _
 " AND (Permissions.pMemberID = " & intLoggedInMemberID & _
 " OR (Permissions.pGroupID = " & intLoggedInMemberGroupID & _
 " and not exists (select * from Permissions where " & _
 " Permissions.pMemberID = " & intLoggedInMemberID & ")))"
jimpaMedlem sedan jan. 2001361 inlägg
#6

På rätt väg :) Men den funkar inte riktigt som jag har tänkt mig.

Den tar bara med poster när medlems numret uppfylls. Har medlemen nr 4 som i mitt ex. ovan så tas inga poster med. Men meningen är då att den defaulta ska gälla, alltså den posten som har medlemsnr. 0

jimpaMedlem sedan jan. 2001361 inlägg
#7

Ingen som har en susning?

Peter SMedlem sedan dec. 20025 483 inlägg
#8
strSQL = _
 "SELECT Forums.fName, Forums.fPassword, Forums.fLocked, " & _
 "Permissions.* " & _
 "FROM Forums " & _
 "INNER JOIN Permissions ON Forums.ForumID = Permissions.pForumID " & _
 "WHERE Forums.ForumID = " & intForumID & _
 " AND (Permissions.pMemberID = " & intLoggedInMemberID & _
 " OR (Permissions.pGroupID = " & intLoggedInMemberGroupID & _
 " and not exists (select * from Permissions where " & _
 " Permissions.pMemberID = " & intLoggedInMemberID & ")) " & _
 " OR (not exists (select 1 from Permissions where Permissions.pMemberID = " & intLoggedInMemberID & ") and " & _
 "     not exists (select 1 from Permissions where Permissions.pGroupID  = " & intLoggedInMemberID & ") and " & _
 "     Permissions.pMemberID = 0))"
jimpaMedlem sedan jan. 2001361 inlägg
#9

Nu verkar det funka :) Tusen tack (y)

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