Håller på med ett communityprojekt i vilket man skall kunna skaffa olika relationer med medlemmar. Detta kanske kan var till hjälp:Hjälp med SQL-sats
Relationerna är kompis och idiot.
När man sedna skall skicka internmail så skall de man har som kompis listas under kompis och de som man har som idioter listas under idioter. Sedan kan man makera den man vill skicka internmailet till.
För att välja ut de relationer som finns i tabellen relationer i databasen som tillhör den som är inloggad använder jag mig av följande koden nedan. Denna kod fungerar utmärkt.
Nu till problemet:
Det så att jag även vill att medlemmarna skall kunna skicka internmail till medlemmar de inte har någon relation med. Detta hade jag tänkt lösa genom att om "Request.QueryString("id")-värdet" (som jag döpt till "Mail_ToUser") inte finns i relationer.person där relationer.id= "&Session("id")" så skall medlemmar.username som tillhör medlemmar.id som är lika med Mail_ToUser listas under "Inga relationer". Det jag inte vet är hur SQL-en för detta skall se ut.
Hoppas ni förstår vad jag menar.
Här är koden:
' #### BEGIN ## om kompis ####
NameList=NameList & " <OPTION VALUE="""" STYLE=""color: #ffffff; background-color: #333333;""> Kompisar:</OPTION>" & vbCrLf
Set objGetData = Server.CreateObject("ADODB.Recordset")
objGetData.Open "SELECT relationer.id, relationer.typ, relationer.person, medlemmar.id, medlemmar.username, medlemmar.status FROM relationer, medlemmar WHERE medlemmar.id=relationer.person AND relationer.typ=1 AND relationer.id = "&Session("id"), objCon
Do Until objGetData.EOF
NameList=NameList & " <OPTION VALUE=" &objGetData("id")
If Mail_ToUser&""=objGetData("id")&"" Then NameList=NameList & " SELECTED" end if
NameList=NameList & "> " &objGetData("username")& "</OPTION>" & vbCrLf
objGetData.MoveNext
Loop
objGetData.Close
Set objGetData = Nothing
' #### END ## om kompis ####
' #### BEGIN ## om idiot ####
NameList=NameList & " <OPTION VALUE="""" STYLE=""color: #ffffff; background-color: #333333;""> Idioter:</OPTION>" & vbCrLf
Set objGetData = Server.CreateObject("ADODB.Recordset")
objGetData.Open "SELECT relationer.id, relationer.typ, relationer.person, medlemmar.id, medlemmar.username, medlemmar.status FROM relationer, medlemmar WHERE medlemmar.id=relationer.person AND relationer.typ=2 AND relationer.id = "&Session("id"), objCon
Do Until objGetData.EOF
NameList=NameList & " <OPTION VALUE="""&objGetData("id")&""""
If Mail_ToUser&""=objGetData("id")&"" Then NameList=NameList & " SELECTED" end if
NameList=NameList & "> " &objGetData("username")& "</OPTION>" & vbCrLf
objGetData.MoveNext
Loop
objGetData.Close
Set objGetData = Nothing
' #### END ## idiot ####Sv: Hjälp med SQL-sats
<code>
Sub WriteOptions(Stream, Recordset, fldValue, fldText, Value, Header)
If Not rs.EOF Then
Else
Stream.WriteText "<OPTION VALUE="""" STYLE=""color: #ffffff; background-color: #333333;""> " & Server.HTMLEncode(Header) & "</OPTION>", adWriteLine
Do
If rs("id") = Mail_ToUser Then
Stream.WriteText "<OPTION VALUE=" & rs("id") & " SELECTED> " & Server.HTMLEncode(rs("username")) & "</OPTION>", adWriteLine
Else
Stream.WriteText "<OPTION VALUE=" & rs("id") & "> " & Server.HTMLEncode(rs("username")) & "</OPTION>", adWriteLine
End If
rs.MoveNext
Loop Until rs.EOF
End If
End Sub
Dim rs
Dim Stream
Dim strSQL
Dim LastTyp
Const adTypeText = 2
Const adModeReadWrite = 3
Const adWriteLine = 1
Set Stream = Server.CreateObject("ADODB.Stream")
Stream.Type = adTypeText
Stream.Mode = adModeReadWrite
Stream.Open
Set rs = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT medlemmar.id, medlemmar.username" & vbCrLf & _
"FROM medlemmar INNER JOIN relationer ON (medlemmar.id=relationer.person)" & vbCrLf & _
"WHERE (relationer.typ=1) AND (relationer.id = "& Session("id") & ")" & vbCrLf & _
"ORDER BY medlemmar.username"
rs.Open strSQL, objCon
WriteOptions Stream, rs, rs("id"), rs("username"), Mail_ToUser, "Kompisar:"
rs.Close
strSQL = "SELECT medlemmar.id, medlemmar.username" & vbCrLf & _
"FROM medlemmar INNER JOIN relationer ON (medlemmar.id=relationer.person)" & vbCrLf & _
"WHERE (relationer.typ=2) AND (relationer.id = "& Session("id") & ")" & vbCrLf & _
"ORDER BY medlemmar.username"
rs.Open strSQL, objCon
WriteOptions Stream, rs, rs("id"), rs("username"), Mail_ToUser, "Idioter:"
rs.Close
strSQL = "SELECT medlemmar.id, medlemmar.username, medlemmar.status, relationer.id, relationer.typ" & vbCrLf & _
"FROM medlemmar LEFT JOIN relationer ON ((medlemmar.id=relationer.person) AND (relationer.id = "& Session("id"))" & vbCrLf & _
"WHERE relationer.Id Is Null" & vbCrLf & _
"ORDER BY medlemmar.username"
rs.Open strSQL, objCon
WriteOptions Stream, rs, rs("id"), rs("username"), Mail_ToUser, "Övriga:"
rs.Close
</code>